关于静态变量初始化顺序规则的一些问题



图片.png


为什么答案是0和1。。。不是很明白
已邀请:
程序的执行顺序有关,单例模式执行完后,count2又执行了一次赋值操作。
如果顺序调整下面的:
        public static int counter1;
        public static int counter2=0;
        private static Singleton singleton = new Singleton();
你再看看结果。
 

macg - 80后IT男

实际顺序是:
1.
count1:0
count2:0
 
2.
count1:1
count2:1
 
3.
count1:1
count2:0
可以看下 深入理解java 虚拟机 -- 其中类加载过程。
1:SingleTon singleTon = SingleTon.getInstance();调用了类的SingleTon调用了类的静态方法,触发类的初始化 
2:类加载的时候在准备过程中为类的静态变量分配内存并初始化默认值 singleton=null count1=0,count2=0 
3:类初始化化,为类的静态变量赋值和执行静态代码快。singleton赋值为new SingleTon()调用类的构造方法 
4:调用类的构造方法后count=1;count2=1 
5:继续为count1与count2赋值,此时count1没有赋值操作,所有count1为1,但是count2执行赋值操作就变为0

要回复问题请先登录注册