今天让你搞懂static 静态变量,静态方法,静态块
static 静态变量
1、定义格式
静态变量由static关键字修饰的变量
public static int staticVariable = 1 ; //定义静态变量 public int normolVariable = 2 ; //普通变量
2、调用方法
我们现在example27类中写一个普通方法
public class example27 { public void test(int a) { System.out.println(a); } }
然后在example28中写一个静态变量并测试,我们由example27中的普通方法来使用example28中的静态变量
public class example28 { public static int staticVariable = 1 ; //定义静态变量 public int normalVariable = 2 ; //普通变量 public static void main(String args[]) { example27 example2 = new example27() ; example2.test(staticVariable); //由静态变量所属类之外的类使用这个静态变量 } }
3、使用场景
静态变量的强大之处可以在于由静态变量所属类之外的类使用这个静态变量。
如 我们定义的通用异常错误类,很多异常状态需要被大量的访问,所以可以将状态信息设置成静态变量让其他的类更方便的去使用。
4、内存分配访问
在类初始化的时候,静态变量不同于其他的变量,静态变量会在类中单独的分一块特殊的公共区域,这块区域中有一个地址就是我们的静态地址,静态变量就是指向这块地址的变量。
静态变量在类进行初始化时候便分配了内存。
普通变量只有类进行实例化的时候进行内存分配。
static 静态方法
1、定义格式
用static修饰的方法叫静态方法
public static void staticTest() { System.out.println("static text"); }
2、调用方法
public class example27 { public static void staticTest(int variable) { System.out.println("static text"); } } public class example28 { public static int staticVariable ; //定义静态变量 public int normalVariable = 2 ; //普通变量 public static void main(String args[]) { Example27.staticTest(staticVariable) ; //不需要实例化即可调用静态方法 } }
注意一点:如果在static方法内访问一个非静态的成员变量这是错误的,因为在类内初始化的时候还没有给普通成员变量分配内存
public int b ; public static void staticTest(int variable) { System.out.println("static text"); b++ ; //错误 }
如果想使用普通变量,需要通过方法接口传入。
3、内存分配
静态方法和静态变量都是在类加载后便有了生命。
对象则是在实例化之后才有了生命
static 静态块
1、定义格式
static{代码块} static { int test=1 ; System.out.println(test); example27.staticTest(staticVariable) ; }
2、执行顺序
static代码块在类的初始化时候最先执行,先于静态变量和方法
存在多个static代码块时候,按他们在类中出现的顺序执行
3、作用域
static代码块内定义的变量作用域代码块内部
代码块也只能调用静态变量和静态方法
总结
jvm只为每个类的static代码块分配一次内存
static{}块最先被执行
访问静态变量要先访问代码块实例化的类
文源网络,仅供学习之用,如有侵权,联系删除。 为方便大家学习,我还整理了一套学习资料,涵盖Java虚拟机、spring框架、Java线程、数据结构、设计模式等等,免费提供给热爱Java的同学~