1. 程式人生 > >類載入過程(clinit()),物件例項化過程(init())

類載入過程(clinit()),物件例項化過程(init())

類載入過程:

1、類載入就是執行Java程式編譯之後在位元組碼檔案中生成的clinit()方法(稱之為類構造器),clinit()方法由靜態變數和靜態程式碼塊組成。

2、子類的載入首先需要先載入父類,如果父類為介面。則不會呼叫父類的clinit方法。一個類中可以沒有clinit方法。

3、clinit方法中的執行順序為:父類靜態變數初始化,父類靜態程式碼塊,子類靜態變數初始化,子類靜態程式碼塊。

4、clinit()方法只執行一次。

物件例項化過程:

1、物件例項化過程就是執行Java程式編譯之後在位元組碼檔案中生成的init()方法(稱之為例項構造器),init()方法由非靜態變數、非靜態程式碼塊以及對應的構造器組成。

2、init()方法可以過載多個,有幾個構造器就有幾個init()方法,每次建立例項,呼叫哪一個構造器,就會呼叫相應的init()方法。

3、init()方法中的執行順序為:父類變數初始化,父類程式碼塊,父類構造器,子類變數初始化,子類程式碼塊,子類構造器。

 

clinit()方法優先於init()方法執行,所以整個順序就是:

父類靜態變數初始化,父類靜態程式碼塊,子類靜態變數初始化,子類靜態程式碼塊,父類非靜態變數初始化,父類非靜態程式碼塊,父類構造器,子類非靜態變數初始化,子類非靜態程式碼塊,子類構造器。