java中静态成员变量与静态块会比构造函数先执行,并且只会执行一次,一个类中有多个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时执行普通代码块和构造函数(普通代码块优先于构造函数)
3)继续执行构造out1的语句,执行最后一个static语句(前3个已经执行了)
4)构造out1时,static执行完再执行普通代码块和构造函数