首頁 > Java > java教程 > 主體

java類別載入機制是什麼

(*-*)浩
發布: 2020-09-17 11:59:26
原創
18047 人瀏覽過

本篇文章將介紹Java的類別載入機制的步驟,請看下列詳細內容。

java類別載入機制是什麼

類別載入機制 

#類別從載入到虛擬機器記憶體開始,到卸載出記憶體為止,它的整個生命週期包括了:載入(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(using)、和卸載(Unloading)七個階段。其中驗證、準備和解析三個部分統稱為連接(Linking),這七個階段的發生順序如下圖所示: 

java類別載入機制是什麼

類別載入的時機

主動引用:一個類別被主動引用之後會觸發初始化過程(加載,驗證,準備需要再此之前開始) 

1)遇到new、getstatic、putstatic或invokestatic這4條字節碼指令時,如果類別沒有進行過初始化,則需要先觸發其初始化。產生這4個指令最常見的Java程式碼場景是:使用new關鍵字實例化物件時、讀取或設定一個類別的靜態欄位(被final修飾、已在編譯器把結果放入常數池的靜態欄位除外)時、以及呼叫一個類別的靜態方法的時候。 

2)使用java.lang.reflect套件的方法對類別進行反射呼叫的時候,如果類別沒有進行過初始化,則需要先觸發其初始化。 

3)當初始化一個類別的時候,如果發現其父類別還沒有進行過初始化,則需要觸發父類別的初始化。 

4)當虛擬機器啟動時,使用者需要指定一個執行的主類別(包含main()方法的類別),虛擬機會先初始化這個類別。

5)當使用jdk7 的動態語言支援時,如果java.lang.invoke.MethodHandle實例最後的解析結果REF_getStatic、REF_putStatic、REF_invokeStatic的方法句柄,而這個方法句柄所對應的類別沒有進行過初始化,則需要先觸發器初始化。

被動引用:一個類別如果是被動引用的話,該類別不會觸發初始化過程 

1)透過子類別引用父類別的靜態字段,不會導致子類別初始化。對於靜態字段,只有直接定義該字段的類別才會被初始化,因此當我們透過子類別來引用父類別中定義的靜態字段時,只會觸發父類別的初始化,而不會觸發子類別的初始化。 

2)透過陣列定義來引用類,不會觸發此類的初始化。 

3)常數在編譯階段會存入呼叫類別的常數池中,本質上沒有直接引用到定義常數的類,因此不會觸發定義常數的類別的初始化。 

以上是java類別載入機制是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!