類是Java程序中最基本的構造塊,其中類的載入是Java程序的重要組成部分,負責將類位元組碼從磁碟讀取到內存中,並且Java虛擬機(JVM)負責在運行中管理這些類。因此我們需要深入研究Java類的載入,從多個方面解釋類載入順序的相關概念。
一、類載入順序JVM
在解釋類載入順序之前,我們需要先了解Java虛擬機(JVM)對Java類的載入方式。在JVM啟動時,會創建三個系統類載入器,分別是:
1. Bootstrap Loader //用於載入Java核心類庫 2. Extension Loader //用於載入Java擴展類庫 3. AppClassLoader //用於載入應用程序的類
Java虛擬機(JVM)則會依次使用它們來載入我們的類。
二、類載入順序 父類
在父子類繼承類型的Java程序中,父類的載入是在子類載入之前,JVM它先載入父類。這是由JVM 類載入機制規定的,它會先查找父類的類載入器來載入父類。只有在父類載入完成之後再考慮子類的載入。
三、類載入器的載入順序
在原始的JVM類載入機制中,它會從下列順序依次尋找類文件:
1. 從 Bootstrap ClassLoader 中尋找類文件; 2. 若 1 失敗,則從 Extension ClassLoader 中尋找類文件; 3. 若 2 失敗,則從 App ClassLoader 中尋找類文件; 4. 若 3 失敗,則使用自定義的 ClassLoader 尋找類文件。
即降低了類載入的耦合性,使得每個類載入器只需要關注需要載入的類和接下來由誰來載入這些類,從而確保類是在使用時才載入,根據使用的不同場景進行相應的載入。
四、類載入順序配置 子優先
類載入順序的配置,我們可以通過parent-delegation屬性進行設置,不同的配置會導致類的載入順序不同。當設置parent-delegation=true時,父類載入器會優先於子類載入器嘗試載入類,反之,設置parent-delegation=false時,子類載入器會優先嘗試載入類。
五、類載入順序要服務起來才能看到嗎
類載入順序只有在服務起來之後才能看到。類載入器是Java虛擬機為Java應用程序提供的動態載入機制,因此我們必須確保應用程序成功地啟動。類載入順序工作最多的時候就是在Java應用程序啟動時,因為在這個時候所有的類都必須被正確地載入才能保證系統的穩定性。
六、父子類載入順序
在Java中,子類總是會優先於父類被載入。父類的載入必須在創建子類的實例之前完成。Java虛擬機通過類的繼承關係來管理不同類的載入順序,使之滿足繼承關係的垂直層次。
七、類的載入順序
在Java程序運行時,每當需要一個類或介面時,Java類載入器就會被調用。如果類載入器沒有找到該類或介面,則它會將該請求轉發給父類載入器,如果該類或介面已經被父類載入器載入,則自己沒有必要重新載入。我們稱這種組織結構為「樹形」的類載入器結構。
八、類的實例化載入順序
在一個類被實例化之前,該類必須被載入和初始化。類的實例化由 Java 的 new 關鍵字完成,載入和初始化分別由類載入器和 Java 虛擬機來完成。所有不是 final 靜態欄位或變數和內聯常量的類成員變數都將在類實例化時進行初始化。
九、類載入的五個過程
類的載入過程可以分為五個步驟:
1. 載入; 2. 驗證; 3. 準備; 4. 解析; 5. 初始化。
十、類載入的時間點和載入順序
類的載入時間點和載入順序取決於應用程序中需要使用類的時間。當應用程序的代碼需要使用某個類時,Java 虛擬機將動態地檢查該類是否已載入。如果該類未載入,則 Java 虛擬機使用類載入器來動態載入該類。由於 Java 類庫在非常適合使用的時候自然會載入,因此此類庫可以適當地進行懶載入。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/205988.html