今天編了個程序,把靜態成員變量的放置順序變了一下,結果也變了。
運行結果是:
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).