Java的類裝載器是Java 動態性核心,Java虛擬機器使用每一個類時的第一件事就是將該類的位元組碼裝載進來,裝載位元組碼的功能是由類裝載起來完成的,類裝載器負責根據一個類的名稱類定位和產生類的位元組碼資料後返回給Java虛擬機器。所以把類裝載器描敘為類位元組碼的製造器更容易讓人理解。 Java虛擬機器中內嵌了一個bootstrap的裝載器,它是用來裝載核心庫中的類(即jdk/jre/lib/rt.jar檔案中類),Java核心包中有另外兩個類裝載器:ExtClassLoader和AppClassLoader,它們都是用java編寫的java類,ExtClassLoader類裝載器負責載入放在<JAVA_HOME>/jre/lib/ext目錄下的jar包中了類,AppClassLoader負責載入應用程式的啟動載入類。 Java提供了抽象類別ClassLoader,所有使用者自訂類裝載器都執行個體化自ClassLoader的子類。System Class Loader是一個特殊的使用者自訂類裝載器,由JVM的實現者提供,在編程者不特別指定裝載器的情況下預設裝載使用者類。系統類別裝載器可以通過ClassLoader.getSystemClassLoader() 方法得到。 例1,測試你所使用的JVM的ClassLoader/*LoaderSample1.java*/public class LoaderSample1{ public static void main(String[] args) { Class c; ClassLoader cl; cl = ClassLoader.getSystemClassLoader();//系統類別裝載器執行個體化 System.out.println(cl); while (cl != null) { cl = cl.getParent();//parent執行個體化 System.out.println(cl); } try { c = Class.forName(“java.lang.Object”); cl = c.getClassLoader();//核心類java.lang.Object執行個體化 System.out.println(“java.lang.Object’s loader is ” + cl); c = Class.forName(“LoaderSample1”);cl = c.getClassLoader();//使用者類LoaderSample1的執行個體化 System.out.println(“LoaderSample1’s loader is ” + cl); } catch (Exception e) { e.printStackTrace();} }} 在我的機器上(Sun Java 1.5.0)的運行結果sun.misc.Launcher$AppClassLoader@82ba41sun.misc.Launcher$ExtClassLoader@923e30nulljava.lang.Object’s loader isnullLoaderSample1’s loader is sun.misc.Launcher$AppClassLoader@82ba41第一行表示,系統類別裝載器執行個體化自類sun.misc.Launcher$AppClassLoader第二行表示,系統類別裝載器的parent執行個體化自類sun.misc.Launcher$ExtClassLoader第三行表示,系統類別裝載器parent的parent為bootstrap第四行表示,核心類java.lang.Object是由bootstrap裝載的第五行表示,使用者類LoaderSample1是由系統類別裝載器裝載的
轉載自:http://blog.csdn.net/tiancorn/article/details/1783500