java中静态成员变量、静态代码块static执行时机
1、java中静态成员变量与静态块会比构造函数先执行,并且只会执行一次
2、一个类中有多个static修饰的成员变量或者代码块,会按照代码中先后的顺序执行
请看下面的示例:
public class Test { public static void main(String[] args) { Out out1 = new Out(); } }
public class Out { static int num = 0; String name = "aaa"; static String name2 = "bbb"; static Out out2 = new Out(); Out() { System.out.println("执行构造函数"); } { System.out.println("执行普通代码块,name值:"+name); } static { num +=1; System.out.println("执行静态代码块,name2值:"+name2+",num值:"+num); } }
执行程序,输出如下:
程序执行顺序为:
1)main方法构造out1时先加载Out类中带static的语句,按代码中先后顺序加载
2)加载到第3个static语句时开始构造out2,再次加载Out类,由于out2是static对象,所以不在执行out2中static语句
3)构造out2时执行普通代码块和构造函数(普通代码块优先于构造函数)
4)继续执行构造out1的语句,执行最后一个static语句(前3个已经执行了)
5)构造out1时,static执行完再执行普通代码块和构造函数