1. 程式人生 > >Java類載入器1.類載入器概述

Java類載入器1.類載入器概述

類載入器概述

一、類的載入

(1)類的載入

  • 當Java程式要使用某個類時,如果該類還未被載入到記憶體中,則系統會通過載入、連線、初始化三步來實現對這個類進行初始化。
  • 載入:就是指將類的class檔案讀入記憶體,併為之建立一個Class物件。任何類被使用時,系統都會建立一個Class物件。
  • 連線
    • 驗證:是否有正確的內部結構,並和其他類協調一致。
    • 準備:負責為類的靜態成員分配記憶體,並設定預設初始化值(類的靜態成員隨著類的載入而載入)。
    • 解析:將類的二進位制資料中的符號引用替換為直接引用。
  • 初始化:就是以前接觸過的普通的初始化步驟。

二、類的初始化時機

(1)類的初始化時機:類在什麼時候做初始化工作呢?

  • 建立類的例項的時候
  • 訪問類的靜態變數,或者為靜態變數賦值的時候
  • 呼叫類的靜態方法的時候
  • 使用反射方式來強制建立某個類或介面對應的 java.lang.Class 物件的時候
  • 初始化某個類的子類的時候(先有父類才能有子類)
  • 直接使用 java.exe 命令來執行某個主類的時候

三、類載入器

(1)類載入器的作用:

  • 負責將 .class檔案 載入到記憶體中,併為之生成對應的Class物件。
  • 雖然我們不需要關心類載入機制,但是瞭解這個類載入機制我們就能更好的理解程式的執行。

(2)類載入器的組成:

  • Bootstrap ClassLoader根類載入器
    • 也被稱為引導類載入器,負責
      Java核心類的載入,比如System,String等。在JDKJRElib目錄下rt.jar檔案中。
  • Extension ClassLoader擴充套件類載入器
    • 負責JRE的擴充套件目錄中jar包的載入。在JDKJRElib目錄下的ext目錄中。
  • Sysetm ClassLoader系統類載入器
    • 負責在JVM啟動時載入來自java命令的class檔案,以及classpath環境變數所指定的jar包和類路徑。

(3)通過這些描述,我們就可以知道我們常用的東西的載入都是由誰(系統類載入器)來完成的。到目前為止,我們已經知道把class檔案載入到記憶體中了,那麼,如果我們僅僅站在這些

class檔案的角度,我們該如何來使用這些class檔案中的內容呢這就是反射要研究的內容。

四、反射

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

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