- 相關(guān)推薦
java類加載器的樹狀組織結(jié)構(gòu)
Java 中的類加載器大致可以分成兩類,一類是系統(tǒng)提供的,另外一類則是由 Java 應(yīng)用開發(fā)人員編寫的。那么java類加載器有哪些,下面yjbys小編為大家一一解讀!
系統(tǒng)提供的類加載器主要有下面三個:
引導(dǎo)類加載器(bootstrap class loader):它用來加載 Java 的核心庫,是用原生代碼來實(shí)現(xiàn)的,并不繼承自 java.lang.ClassLoader。擴(kuò)展類加載器(extensions class loader):它用來加載 Java 的擴(kuò)展庫。Java 虛擬機(jī)的實(shí)現(xiàn)會提供一個擴(kuò)展庫目錄。該類加載器在此目錄里面查找并加載 Java 類。系統(tǒng)類加載器(system class loader):它根據(jù) Java 應(yīng)用的類路徑(CLASSPATH)來加載 Java 類。一般來說,Java 應(yīng)用的類都是由它來完成加載的。可以通過 ClassLoader.getSystemClassLoader()來獲取它。除了系統(tǒng)提供的類加載器以外,開發(fā)人員可以通過繼承 java.lang.ClassLoader類的方式實(shí)現(xiàn)自己的類加載器,以滿足一些特殊的需求。
除了引導(dǎo)類加載器之外,所有的類加載器都有一個父類加載器。通過 表 1中給出的 getParent()方法可以得到。對于系統(tǒng)提供的類加載器來說,系統(tǒng)類加載器的父類加載器是擴(kuò)展類加載器,而擴(kuò)展類加載器的父類加載器是引導(dǎo)類加載器;對于開發(fā)人員編寫的類加載器來說,其父類加載器是加載此類加載器 Java 類的類加載器。因?yàn)轭惣虞d器 Java 類如同其它的 Java 類一樣,也是要由類加載器來加載的。一般來說,開發(fā)人員編寫的類加載器的父類加載器是系統(tǒng)類加載器。類加載器通過這種方式組織起來,形成樹狀結(jié)構(gòu)。樹的根節(jié)點(diǎn)就是引導(dǎo)類加載器。圖 1中給出了一個典型的類加載器樹狀組織結(jié)構(gòu)示意圖,其中的箭頭指向的是父類加載器。
圖 1. 類加載器樹狀組織結(jié)構(gòu)示意圖
代碼清單 1演示了類加載器的樹狀組織結(jié)構(gòu)。
清單 1. 演示類加載器的樹狀組織結(jié)構(gòu)
public class ClassLoaderTree {
public static void main(String[] args) {
ClassLoader loader = ClassLoaderTree. class .getClassLoader();
while (loader != null ) {
System.out.println(loader.toString());
loader = loader.getParent();
}
}
} |
每個 Java 類都維護(hù)著一個指向定義它的類加載器的引用,通過 getClassLoader()方法就可以獲取到此引用。代碼清單 1中通過遞歸調(diào)用getParent()方法來輸出全部的父類加載器。代碼清單 1的運(yùn)行結(jié)果如 代碼清單 2所示。
清單 2. 演示類加載器的樹狀組織結(jié)構(gòu)的運(yùn)行結(jié)果
sun.misc.Launcher$AppClassLoader @9304b1
sun.misc.Launcher$ExtClassLoader @190d11
|
如 代碼清單 2所示,第一個輸出的是 ClassLoaderTree類的類加載器,即系統(tǒng)類加載器。它是 sun.misc.Launcher$AppClassLoader類的實(shí)例;第二個輸出的是擴(kuò)展類加載器,是 sun.misc.Launcher$ExtClassLoader類的實(shí)例。需要注意的是這里并沒有輸出引導(dǎo)類加載器,這是由于有些 JDK 的實(shí)現(xiàn)對于父類加載器是引導(dǎo)類加載器的情況,getParent()方法返回 null。
【java類加載器的樹狀組織結(jié)構(gòu)】相關(guān)文章:
Java定時器代碼的編寫06-16
企業(yè)項(xiàng)目管理組織結(jié)構(gòu)09-02
Java時間類及函數(shù)用法07-26
java實(shí)現(xiàn)web服務(wù)器的方法10-14
Java編寫計(jì)算器的的常見做法08-12
Java Web服務(wù)器(應(yīng)用服務(wù)器)10-03
java語句及其控制結(jié)構(gòu)題庫及答案06-24
組織結(jié)構(gòu)與企業(yè)戰(zhàn)略的匹配06-04