類載入順序詳解

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

(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

發表回復

登錄後才能評論