類加載順序詳解

類是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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-07 17:48
下一篇 2024-12-07 17:48

相關推薦

  • QML 動態加載實踐

    探討 QML 框架下動態加載實現的方法和技巧。 一、實現動態加載的方法 QML 支持從 JavaScript 中動態指定需要加載的 QML 組件,並放置到運行時指定的位置。這種技術…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • 類加載的過程中,準備的工作

    類加載是Java中非常重要和複雜的一個過程。在類加載的過程中,準備階段是其中一個非常重要的步驟。準備階段是在類加載的連接階段中的一個子階段,它的主要任務是為類的靜態變量分配內存,並…

    編程 2025-04-28
  • Lazarus LoadLibrary:DLL動態鏈接庫的加載和使用

    本文將從以下幾個方面介紹Lazarus中LoadLibrary和FreeLibrary函數的使用方法: 一、簡介 LoadLibrary和FreeLibrary是Windows動態…

    編程 2025-04-27
  • Python set去重保留原順序

    當一個列表中出現重複的元素時,為了去除這些重複元素可以使用Python提供的集合(set)數據結構,集合可以去除元素的重複出現。然而,這樣會導致原有的元素順序混亂,這時,需要使用一…

    編程 2025-04-27
  • Spring Boot本地類和Jar包類加載順序深度剖析

    本文將從多個方面對Spring Boot本地類和Jar包類加載順序做詳細的闡述,並給出相應的代碼示例。 一、類加載機制概述 在介紹Spring Boot本地類和Jar包類加載順序之…

    編程 2025-04-27
  • 用Python加載鳶尾花數據

    本文將詳細介紹如何使用Python加載鳶尾花數據,包括數據源的介紹、數據的獲取和清洗、數據可視化等方面。 一、數據源的介紹 鳶尾花數據集(Iris dataset)是常用的分類實驗…

    編程 2025-04-27
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25

發表回復

登錄後才能評論