天天看點

Java程式員的日常 —— Java類加載中的順序

之前說過Java中類的加載順序,這次看完繼承部分,就結合繼承再來說說類的加載順序。

由于static塊會在首次加載類的時候執行,是以下面的例子就是用static塊來測試類的加載順序。

在上面的例子中,類C繼承B,B繼承A,而C有依賴于D。是以當建立C的時候,會自動加載C繼承的B和依賴的D,然後B又會加載繼承的A。隻有A加載完,才能順利的加載B;BD加載完,才能加載C。這就是類的加載順序了。

在類的加載過程中,隻有内部的變量建立完,才會去執行這個類的構造方法。

在上面的例子中,A2裡面有B2變量,B2則有C2D2變量。是以類的加載還是先讀取到哪個,就執行相應的靜态塊。

當依賴的對象都定義完,才會執行構造方法:

在類的加載過程中,靜态成員類的對象,會優先加載;而普通成員類的對象則是使用的時候才回去加載。

輸出:

第一點,所有的類都會優先加載基類

第二點,靜态成員的初始化優先

第三點,成員初始化後,才會執行構造方法

第四點,靜态成員的初始化與靜态塊的執行,發生在類加載的時候。

第四點,類對象的建立以及靜态塊的通路,都會觸發類的加載。

看代碼:

執行結果:

是以可以得出結論:

首先會調用基類的構造方法

其次,調用成員的構造方法

最後,調用自己的構造方法