关于接口的基本特点:
改变常量定义位置
结果改变:
原因分析:
当一个类调用静态方法的时候,对该类算是主动使用,初始化顺序.
先在虚拟机中给counter1赋值为0,counter2变为0.然后再初始化Singleton对象,
这时候counter2=1,接下来初始化,counter2被覆盖为0.
所以打印counter2为0
在主动使用类的初始化之前,会给静态变量赋值.
初始化过程如下:
Counter1被赋值为0
Singleton被赋值为null
Counter2被赋值为0
初始化之后,counter没有变.仍为零.
Singleton被创建,执行构造函数,其中的counter1++;counter2++;
Counter1,counter2都变为1
后来再接着初始化counter2,counter2变为0
两个常量打印的都是1
初始化过程:
先进行解析,这时候将静态变量赋初值:
Counter1=0
Singleton=null;
Counter2=0;
初值赋完之后,完成初始化:
Counter1=1;
Slingleton调用构造函数,counter+1=2,Counter2=1;
最后,counter2=0
结果如下