我不確定我的頭腦中是否有正確的Java初始化機制模型。每類遵循以下幾點:靜態成員java初始化順序
- 初始化父類,如果存在一個
- 自己初始化
初始化遵循以下幾點:
- 初始化靜態和實例變量,有自己的價值觀設置在初始化程序之外。
- 運行靜態初始化塊
- 運行的構造塊
是不是準確/正確嗎?
我不確定我的頭腦中是否有正確的Java初始化機制模型。每類遵循以下幾點:靜態成員java初始化順序
初始化遵循以下幾點:
是不是準確/正確嗎?
代碼執行如下 -
靜態初始化塊運行一次,在第一次加載類時。
靜態變量
所有超級構造函數。
實例init塊在構造函數調用super()後運行。
實例變量。
(初始化程序塊執行在它們出現的順序。)
不能保證靜態init塊會在靜態變量之前運行。事實上,許多靜態變量(那些是final的並且具有編譯時間常量表達式的)在靜態初始化塊之前分配。 – henko 2012-04-18 19:08:38
根據Java language specification,你的假設或多或少是正確的。例外情況是:當構造類(與構造函數一起)類初始化後
我只是想寫下來,我期望第1段 – 2012-04-18 16:16:08
我會我也期望這一點,我剛纔注意到,這個問題陳述了靜態和實例變量在課堂建設之前一起初始化的假設。 – henko 2012-04-18 16:18:21
有一個在初始化對象和加載類的差。靜態成員在類加載時被初始化,而非靜態成員在創建對象時被初始化。 – scravy 2012-04-18 16:08:07
要小心你說的「初始化」 – UmNyobe 2012-04-18 16:08:31
可能是http://stackoverflow.com/questions/3499214/java-static-class-initialization的副本 – 2012-04-18 16:09:24