Java靜態變數初始化的坑

2021-09-11 18:54:27 字數 689 閱讀 6739

如圖所示的**

class singleton   

public static singleton getinstance()

}

public class test

}

如圖所示的**執行之後的結果為「count=1 count=1」,而這和我們想象中的兩個值分別為1,2不一樣,這是因為在test中呼叫getinstance時,首先會將sington中的靜態方法和變數按前後順序進行載入,在singleton中,首先會建立乙個空物件,在該物件建立好之後,會立即呼叫建構函式(兩個資料成員初始化都為0),因而呼叫建構函式之後兩個值均為1。之後便是count1,count2進行顯示初始化,count1沒有顯示初始化,所以其值依然為1,count2顯示初始化為1,所以最後值也依然是1。

而如果是下面這種情況,

class singleton   

public static singleton getinstance()

}

public class demo

}

則最後的輸出count1和count2分別為1,2。這是因為在這種情況下首先是將兩個資料成員進行顯示初始化,分別為1、2,然後是建立新物件,建立好之後就通過建構函式將兩個資料值各加一,最後輸出的便為1,2。

靜態變數初始化順序

1.begin a a a a,from a的物件 a a,a.num01 0 a a,b.num02 0 a a,b.instance a null end a a begin a a a a,from a的物件 a a,a.num01 1 a a,b.num02 1 a a,b.instance...

Java中靜態變數和非靜態變數的初始化順序

先看下面的程式 package c05.net class bowl void f1 class cupboard static bowl b3 new bowl 3 class table table string a,int i public class order public static ...

final非靜態變數初始化

size medium final變數可以在任何可以被始化的地方被始化,具體應該是建構函式之前或建構函式中,但只能被初始化一次.一旦被初始化後就不能再次賦 值 重新指向其它物件 作為成員變數一定要顯式初始化,而作為臨時變數則可以只定義不初始化 當然也不能引用 即使是作為乙個類中的成員變數,也還可以在...