好程式設計師Java培訓分享Java類載入的過程概述

好程式設計師發表於2020-10-12

  好程式設計師Java 培訓分享 Java 類載入的過程概述:一 . 類的載入概述

  當程式要使用某個類時,如果該類還未被載入到記憶體中,則系統會透過載入、連線、初始化三步來實現對這個類進行初始化。

  1. 載入:是將 class 檔案讀入記憶體,併為之建立一個 Class 物件。任何類被使用時系統都會建立一個 Class 物件。

  2. 連線:

  (1) 驗證是否有正確的內部結構,並和其他類協調一致。

  (2) 準備負責為類的靜態成員分配記憶體,並設定預設初始化值。

  (3) 解析將類的二進位制資料中的符號引用替換為直接。

  3. 初始化:就是我們以前講過的初始化步驟。

  二. 類載入時機

  當Java 程式首次透過下面 6 種方式使用某個類或介面時,系統會初始化該類或介面。

  1. 建立類的例項。

  2. 訪問類的靜態變數,或者為靜態變數賦值。

  3. 呼叫類的靜態方法。

  4. 初始化某個類的子類。

  5. 直接使用 Java.exe 命令來執行某個主類。

  6. 使用反射方式來強制建立某個類或介面對應的 Java.lang.Class 物件。

  三. 類載入器的概述和分類

  1. 類載入器負責將 .class 檔案載入到記憶體中,併為之生成對應的 Class 項,在 Java 中,類裝載器把一個類裝入 JVM 中,要經過以下步驟:

  (1) 裝載:查詢和匯入 Class 檔案 ;

  (2) 連結:把類的二進位制資料合併到 JRE ;

  校驗:檢查載入Class 檔案資料的正確性 ;

  準備:給類的靜態變數分配儲存空間;

  解析:將符號引用轉成直接引用;

  (3) 初始化:對類的靜態變數,靜態程式碼塊執行初始化操作

  (4) JVM 啟動時,會形成由三個載入器組成的初始類載入器層次結構:

  Bootstrap ClassLoader 根類載入器

  Extension ClassLoader 擴充套件類載入器

  System ClassLoader 系統類載入器

  2. 類載入器的作用

  Bootrap ClassLoader 被稱為引導 ( 也稱為原始或跟 ) 類載入器,它負責載入 Java 的核心類。跟類載入器不是 Java.lang.ClassLoader 的子類,而是 JVM 自身實現的。在 JDK JRE lib 目錄下 rt.jar 檔案中。

  Extension ClassLoader 負責載入 JRE 擴充目錄中的 JAR 包的類,它的父類載入器是跟類載入器。在 JDK JRE lib 目錄下 ext 目錄。

  System ClassLoader 負責在 JVM 啟動時載入來自 Java 命令的 -classpath 選項、 Java.class,path 系統屬性,或 CLASSPATH 指定的 jar 包和類歷經。系統可透過 ClassLoader 的靜態方法或區該系統類載入器。如果沒有特別指定,則使用者自定義的類載入器都已類載入器作為父載入器。

  四. 反射概述

JAVA 反射機制是在執行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法,同時對於任意一個物件,都能夠呼叫它的任意一個方法和屬性,這種動態獲取的資訊以及動態呼叫物件方法的功能稱為 Java 語言的反射機制。

1. 要想解剖一個類 , 必須先要獲取到該類的位元組碼檔案物件,而解剖使用的就是 Class 類中的方法,所以先要獲取到每一個位元組碼檔案對應的 Class 型別的物件。

2. 每個類被載入後,系統會為該類生成一個對應的 Class 物件,透過該 Class 物件可以訪問到 JVM 中的這個類。

  獲得Class 物件通常有三種方式:

  (1) 使用 Class 類的 forName(String clazz) 靜態方法。

  (2) 呼叫某個類的 class 屬性來獲取該類的的 Class 物件。

  (3) 呼叫某個物件的 getClass() 方法,該方法是 Object 類的一個方法。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2726355/,如需轉載,請註明出處,否則將追究法律責任。

相關文章