天天看點

Java面試題之Java類加載機制詳解!

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

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的子類)。

想要了解更多關于Java面試題的相關内容,歡迎關注小千,後期分享更多Java知識。

本文來自千鋒教育,轉載請注明出處。