1.static变量
只依赖于类存在,同时通过类名即可访问,不需要通过对象实例来访问;
所有对象实例,关于static变量的值都共享存储在一个共同的内存空间中(栈);
2.static方法
只依赖于类存在,同时通过类名即可访问,不需要通过对象实例来访问;
static方法禁止使用非static变量以及非static方法;非静态方法中什么都可以调用;
3.static代码块
[1]一个类中只能出现类变量、类方法、静态代码块;
[2]静态代码块只在类第一次被加载时调用;
即在程序运行期间,静态代码块只运行一次;
执行顺序为:静态代码块>匿名代码块>构造函数;
1 class StaticBlock 2 { 3 //静态代码块>匿名代码块>构造函数 4 static 5 { 6 System.out.println("22222"); 7 } 8 { 9 System.out.println("11111"); 10 } 11 public StaticBlock() 12 { 13 System.out.println("33333"); 14 } 15 { 16 System.out.println("44444"); 17 } 18 }
1 public class StaticBlockTest{ 2 3 public static void main(String[] args){ 4 StaticBlock obj1 = new StaticBlock(); 5 StaticBlock obj2 = new StaticBlock(); 6 } 7 }第一次运行到StaticBlock时,就运行static块;每次运行到new了对象出来时,匿名块和构造函数都会被依次调用
结果为:
22222
11111
44444
33333
11111
44444
33333