.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.子類構造函數