類是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-hant/n/205988.html