代码
public class LoadingTest {
public static void main(String[] args) {
System.out.println("a:"+Load.a);
System.out.println("b:"+Load.b);
}
}
class Load{
public static int a;
private static Load load = new Load();
public static int b = 0;
private Load(){
a++;
b++;
}
}
结果
原因
1.因为使用类的静态变量会导致类的初始化
2.在初始化之前还会经过验证和准备阶段,在准备阶段先为静态变量赋为默认值及 a=0,load=null,b=0
3.在初始化时按声明的顺序为静态变量进行初始化(赋为真正的值)此时a还是为默认值,load则会调用私有的构造器,构造器 执行完毕a=1,b=1,然后b进行初始化(把构造器的执行结果b=1覆盖)b=0