關於類的加載

今天編了個程序,把靜態成員變量的放置順序變了一下,結果也變了。

運行結果是:

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).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章