Java中的init方法和clinit方法?

.java在編譯以後會在字節碼文件中生成《init》方法,稱之爲實例構造器,該實例構造器會將語句塊,變量初始化,調用父類的構造器等操做收斂到<init>方法中,收斂順序(這裏只討論非靜態變量和語句塊)爲:java

1.父類變量初始化 2.父類語句塊 3.父類構造函數 4.子類變量初始化 5.子類語句塊 6.子類構造函數 函數

所謂收斂到init方法中的意思就是,將這些操做放到init方法中去執行。對象

clinit:接口

.java在編譯以後還在字節碼文件中生成clinit方法,稱之爲構造器,類構造器同實例構造器同樣 ,會將靜態語句塊,靜態變量初始化,收斂到clinit方法中,收斂順序爲:it

1.父類靜態變量初始化編譯

2.父類靜態語句塊變量

3.子類靜態變量初始化cli

4.子類靜態語句塊。構造函數

若是父類爲接口,那麼不會調用父類clinit方法。一個類能夠沒有clinit方法方法

clinit方法是在類加載過程當中執行的 而init是在對象實例化執行的 因此clinit必定比init先執行,因此整個順序就是,

1.父類靜態變量初始化

2.父類靜態語句塊

3.子類靜態變量初始化

4.子類之態語句塊

5.父類變量初始化

6.父類語句塊 

7.父類構造函數 

8.子類變量初始化 

9.子類語句塊

10.子類構造函數  

相關文章
相關標籤/搜索