Java類載入機制詳解【java面試題】

千鋒教育qyf發表於2021-07-16

面試

  Java類載入機制詳解【java面試題】

  (1)問題分析:

  Class檔案由類裝載器裝載後,在JVM中將形成一份描述Class結構的元資訊物件,透過該元資訊物件可以獲知Class的結構資訊:如建構函式,屬性和方法等,Java允許使用者藉由這個Class相關的元資訊物件間接呼叫Class物件的功能。

  虛擬機器把描述類的資料從class檔案載入到記憶體,並對資料進行校驗,轉換解析和初始化,最終形成可以被虛擬機器直接使用的Java型別,這就是虛擬機器的類載入機制。

  (2)核心答案講解:

  類裝載器就是尋找類的位元組碼檔案,並構造出類在JVM內部表示的物件元件。在Java中,類裝載器把一個類裝入JVM中,要經過以下步驟:

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

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

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

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

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

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

  Java程式可以動態擴充套件是由執行期動態載入和動態連結實現的;比如:如果編寫一個使用介面的應用程式,可以等到執行時再指定其實際的實現(多型),解析過程有時候還可以在初始化之後執行;比如:動態繫結(多型)。

  (3)問題擴充套件

  由於Java的跨平臺性,經過編譯的Java源程式並不是一個可執行程式,而是一個或多個類檔案。當Java程式需要使用某個類時,JVM會確保這個類已經被載入、連線(驗證、準備和解析)和初始化。類的載入是指把類的.class檔案中的資料讀入到記憶體中,通常是建立一個位元組陣列讀入.class檔案,然後產生與所載入類對應的Class物件。載入完成後,Class物件還不完整,所以此時的類還不可用。當類被載入後就進入連線階段,這一階段包括驗證、準備(為靜態變數分配記憶體並設定預設的初始值)和解析(將符號引用替換為直接引用)三個步驟。最後JVM對類進行初始化,包括:

  1)如果類存在直接的父類並且這個類還沒有被初始化,那麼就先初始化父類;

  2)如果類中存在初始化語句,就依次執行這些初始化語句。

  類的載入是由類載入器完成的,類載入器包括:根載入器(BootStrap)、擴充套件載入器(Extension)、系統載入器(System)和使用者自定義類載入器(java.lang.ClassLoader的子類)。


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

相關文章