今天编了个程序,把静态成员变量的放置顺序变了一下,结果也变了。
运行结果是:
obj.counter1=100
obj.counter2=10
obj.counter3=6
现在把顺序变一变如下:
运行结果是:
obj.counter1=101
obj.counter2=11
obj.counter3=7
以上把静态变量的放置顺序变了一下,为什么结果都变了呢?
答案是:
如果有静态变量,那么先构造静态变量,如果有多个静态变量那么按顺序初始化,实际上构造函数也相当于一个静态方法。
对于程序一:
上述Singleton obj = Singleton.getInstance(); 执行构造函数,此时counter 1、2、3实际上并未被初始化只是被都预初始化为0,
所以构造函数结束后counter 1、2、3都等于1。然后三个变量都被依次初始化,为100,10,6 。
对于程序二:
三个变量都被依次初始化,为100,10,6。然后执行Singleton obj = new Singleton(),此时三个变量都加一,所以结果为:100,11,7。
记住:静态变量是按顺序初始化的。未初始化前都被预初始化(例如:int变量=0).