如何初始化一個類中的靜態成員變量?
如果不考慮父類的話,簡單來說是先進行靜態初始化,后進行非靜態初始化。
靜態初始化包括靜態成員變量的初始化和靜態塊,實際上編譯時都會集中到static塊中。
而非靜態初始化包括非靜態成員變量初始化和非靜態塊以及構造方法,編譯后都會集中到構造方法中。
如果沒有相互調用那么很簡單,先進行靜態初始化,如果靜態初始化過程中又調用后者呢?
可以寫一個代碼試驗一下:
輸出:
可以看到確實是先進行靜態初始化,可是中間夾雜著對于構造方法的調用。
雖然編譯器沒有報錯,但是這種調用其實是有風險的。
因為靜態成員變量(假設有的話)并未初始化的過程中就調用類的構造函數,假設有依賴的情況下,實際上過程是不可控的。
看下面這個例子:
能想象到這種輸出嗎?
所以如果非要在靜態初始化過程中,調用本類的構造函數。
一定要注意初始化順序問題,精確到語句。