天天看點

《Thinking in Java》第四版筆記---類的加載和對象初始化

類加載的時機:第一次建立對象或者第一次使用該類的時候。解釋一下,第一次建立對象是指通過關鍵字new一個對象;第一次使用則有很多種情況,例如第一次使用該類的static成員(變量/方法),或者子類第一次建立對象/加載時,也會觸發加載器加載父類。

對象初始化指調用類的構造器時進行的操作。

類加載的順序:

1、加載器會找到該類的.class檔案然後載入;

2、如果發現該類有父類,再回到步驟1 繼續加載父類(如果已經加載過則不會再次加載),以此類推直至“祖宗類”Object類;

3、加載完.class檔案後,從Object類至該類的繼承順序開始static初始化(初始化static成員變量,執行static代碼塊)。

至此類就加載完畢了,值得注意的是:類的加載隻會進行一次。

當類加載完畢之後,對象才能被建立以及初始化,其順序是:

1、在該類的對象初始化之前,會先初始化其父類,以此類推直至Object類;

2、先初始化非static成員變量(static成員變量已經在類加載時初始化了),再調用構造器方法。

值得注意的是:步驟2 要參照步驟1 的說明

構造動作一經發生,那麼對象所有部分的全體成員都會得到建構,然而在構造器内部,我們必須確定所要使用的成員都已經建構完畢。為了確定這一目的,唯一的辦法就是首先調用基類構造器。(此句是《Thinking in Java》中的原話,基類即父類)。

驗證類的加載和對象初始化順序最簡單的方法就是寫段代碼,執行看結果。