類加載器(ClassLoader)

    「經過一個類的全限定名來獲取描述此類的二進制字節流」這個動做放到java虛擬機外部去實現,以便讓引用程序本身決定如何去獲取所須要的類。實現這個動做的代碼模塊被稱爲類加載器。 java

    類加載器(ClassLoader)用來加載 class字節碼到 Java 虛擬機中。通常來講,Java 虛擬機使用 Java 類的方式以下:Java 源文件在通過 Javac以後就被轉換成 Java 字節碼文件(.class 文件)。類加載器負責讀取 Java 字節代碼,並轉換成 java.lang.Class 類的一個實例。每個這樣的實例用來表示一個 Java 類。實際的狀況可能更加複雜,好比 Java 字節代碼多是經過工具動態生成的,也多是經過網絡下載 網絡

    類加載器雖然只用於實現類的加載動做,但它在Java程序中起到的做用卻遠遠不限於類加載階段。對於任意一個類,都須要由加載它的類加載器和這個類自己一同確立其在Java虛擬中的惟一性。說通俗一些,比較兩個類是否「相等」,只有在兩個類是由同一個類加載器的前提之下才有意義,不然,即便這兩個類來源於同一個class文件,只要加載它的類加載器不一樣,那這兩個類一定不相等。這裏所指的「相等」包括表明類的Class對象的equal方法、isAssignableFrom()、isInstance()方法及instance關鍵字返回的結果。 工具

Bootstrap Loader  - 負責加載系統類  spa

這個類加載器負責將存放在<java_home>\lib目錄中的,或者被-xbootclasspath參數所指定的路徑中的,而且是虛擬機識別的類庫加載到虛擬機內存中。啓動類加載器沒法被java程序猿直接引用。 .net

ExtClassLoader  - 負責加載擴展類  對象

這個加載器負責加載<java_home>\lib\ext目錄中的,或者被java.ext.dirs系統變量所指定的路徑中的全部類庫,開發者能夠直接使用擴展類加載器 blog

AppClassLoader  - 負責加載應用類  內存

這個類加載器是lassloader中的getsystemClassloader()方法的返回值,因此通常也成它爲系統類加載器。負責加載用戶類路徑上所指定的類庫,開發者能夠直接使用這個類加載器,若是應用程序中沒有自定義過本身的類加載器,通常狀況下這個就是程序中的默認的類加載器。 ssl

若是一個類加載器收到了類加載的請求,它首先不會本身去加載這個類,而是把這個請求委派給父類加載器去完成,每個層次的類加載器都是如此,所以全部的加載請求最終都應該傳送到頂層的啓動類加載器中,只有當父加載器反饋本身沒法完成這個加載請求時,子類加載器纔會嘗試本身去加載。 開發



參考:http://blog.csdn.net/java2000_wl/article/details/8222876

相關文章
相關標籤/搜索