當前位置:才華齋>IT認證>JAVA認證>

java類載入器的樹狀組織結構

JAVA認證 閱讀(1.44W)

Java 中的類載入器大致可以分成兩類,一類是系統提供的,另外一類則是由 Java 應用開發人員編寫的。那麼java類載入器有哪些,下面yjbys小編為大家一一解讀!

java類載入器的樹狀組織結構

  系統提供的類載入器主要有下面三個:

引導類載入器(bootstrap class loader):它用來載入 Java 的核心庫,是用原生程式碼來實現的,並不繼承自 sLoader。擴充套件類載入器(extensions class loader):它用來載入 Java 的擴充套件庫。Java 虛擬機器的實現會提供一個擴充套件庫目錄。該類載入器在此目錄裡面查詢並載入 Java 類。系統類載入器(system class loader):它根據 Java 應用的類路徑(CLASSPATH)來載入 Java 類。一般來說,Java 應用的類都是由它來完成載入的。可以通過 ystemClassLoader()來獲取它。除了系統提供的類載入器以外,開發人員可以通過繼承 sLoader類的方式實現自己的類載入器,以滿足一些特殊的需求。

除了引導類載入器之外,所有的類載入器都有一個父類載入器。通過 表 1中給出的 getParent()方法可以得到。對於系統提供的類載入器來說,系統類載入器的父類載入器是擴充套件類載入器,而擴充套件類載入器的父類載入器是引導類載入器;對於開發人員編寫的類載入器來說,其父類載入器是載入此類載入器 Java 類的類載入器。因為類載入器 Java 類如同其它的 Java 類一樣,也是要由類載入器來載入的。一般來說,開發人員編寫的類載入器的父類載入器是系統類載入器。類載入器通過這種方式組織起來,形成樹狀結構。樹的根節點就是引導類載入器。圖 1中給出了一個典型的類載入器樹狀組織結構示意圖,其中的箭頭指向的是父類載入器。

圖 1. 類載入器樹狀組織結構示意圖

程式碼清單 1演示了類載入器的樹狀組織結構。

清單 1. 演示類載入器的.樹狀組織結構

publicclassClassLoaderTree{publicstaticvoidmain(String[]args){ClassLoaderloader=ClassLoaderTree.classlassLoader();while(loader!=null){tln(ring());loader=arent();}}}

每個 Java 類都維護著一個指向定義它的類載入器的引用,通過 getClassLoader()方法就可以獲取到此引用。程式碼清單 1中通過遞迴呼叫getParent()方法來輸出全部的父類載入器。程式碼清單 1的執行結果如 程式碼清單 2所示。

清單 2. 演示類載入器的樹狀組織結構的執行結果

cher$AppClassLoader@9304b1cher$ExtClassLoader@190d11

如 程式碼清單 2所示,第一個輸出的是 ClassLoaderTree類的類載入器,即系統類載入器。它是 cher$AppClassLoader類的例項;第二個輸出的是擴充套件類載入器,是 cher$ExtClassLoader類的例項。需要注意的是這裡並沒有輸出引導類載入器,這是由於有些 JDK 的實現對於父類載入器是引導類載入器的情況,getParent()方法返回 null。