java類加載器的樹狀組織結構
Java 中的類加載器大致可以分成兩類,一類是系統提供的,另外一類則是由 Java 應用開發人員編寫的。那麼java類加載器有哪些,下面yjbys小編為大家一一解讀!
系統提供的類加載器主要有下面三個:
引導類加載器(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. 演示類加載器的.樹狀組織結構
public class ClassLoaderTree{ public static void main(String[]args){ ClassLoaderloader=ClassLoaderTree. class lassLoader(); while (loader!= null ){ tln(ring()); loader=arent(); } } } |
每個 Java 類都維護着一個指向定義它的類加載器的引用,通過 getClassLoader()方法就可以獲取到此引用。代碼清單 1中通過遞歸調用getParent()方法來輸出全部的父類加載器。代碼清單 1的運行結果如 代碼清單 2所示。
清單 2. 演示類加載器的樹狀組織結構的運行結果
cher$AppClassLoader @9304b1 cher$ExtClassLoader @190d11 |
如 代碼清單 2所示,第一個輸出的是 ClassLoaderTree類的類加載器,即系統類加載器。它是 cher$AppClassLoader類的實例;第二個輸出的是擴展類加載器,是 cher$ExtClassLoader類的實例。需要注意的是這裏並沒有輸出引導類加載器,這是由於有些 JDK 的實現對於父類加載器是引導類加載器的情況,getParent()方法返回 null。
-
Java字符串反轉和Eclipse代碼自動提示
Java字符串反轉問題java反轉:可以使用StringBuffer中的reverse()方法來實現字符串反轉。也可以自己寫個算法。如下所示:Java代碼StringparamString=武漢海源科技有限公司;/**自己寫反轉算法*/char[]value=arArray();intparamStringLength=th()-1;for(inti=paramS...
-
2016年java編譯命令詳解
最近小編重新複習了一下java基礎,這裏便講講對於一個類文件如何編譯、運行、反編譯的。也讓自己加深一下印象如題,首先我們在桌面,開始->運行->鍵入cmd回車,進入windows命令行。進入如圖所示的畫面:可知,當前默認目錄為C盤Users文件夾下的Administrator文件夾。一般...
-
2016年最新JAVA編程題及答案
【程序1】題目:打印出所有的"水仙花數",所謂"水仙花數"是指一個三位數,其各位數字立方和等於該數本身。例如:153是一個"水仙花數",因為153=1的三次方+5的三次方+3的三次方。1.程序分析:利用for循環控制100-999個數,每個數分解出個位,十位,百位。【程序2】題目:古典問題:有...
-
Java高級工程師試題
Sun認證Java程序員考試內容涉及Java所有相關知識、編程概念及applet開發技巧。下面是關於Java高級工程師試題,希望大家認真做題!一、Java基礎1.String類為什麼是final的。2.HashMap的源碼,實現原理,底層結構。3.説説你知道的幾個Java集合類:list、set、queue、map...