1、啟動類加載器:Bootstrap ClassLoader,負責加載存放在JDK\jre\lib(JDK代表JDK的安裝目錄,下同)下,或被-Xbootclasspath參數(shù)指定的路徑中的,并且能被虛擬機識別的類庫(如rt.jar,所有的java.*開頭的類均被Bootstrap ClassLoader加載)。啟動類加載器是無法被Java程序直接引用的。
2、擴展類加載器:Extension ClassLoader,該加載器由sun.misc.Launcher$ExtClassLoader實現(xiàn),它負責加載JDK\jre\lib\ext目錄中,或者由java.ext.dirs系統(tǒng)變量指定的路徑中的所有類庫(如javax.*開頭的類),開發(fā)者可以直接使用擴展類加載器。
3、應(yīng)用程序類加載器:Application ClassLoader,該類加載器由sun.misc.Launcher$AppClassLoader來實現(xiàn),它負責加載用戶類路徑(ClassPath)所指定的類,開發(fā)者可以直接使用該類加載器,如果應(yīng)用程序中沒有自定義過自己的類加載器,一般情況下這個就是程序中默認的類加載器。
4、自定義類加載器:因為JVM自帶的ClassLoader只是懂得從本地文件系統(tǒng)加載標準的java class文件,因此如果編寫了自己的ClassLoader,便可以做到如下幾點:
在執(zhí)行非置信代碼之前,自動驗證數(shù)字簽名。動態(tài)地創(chuàng)建符合用戶特定需要的定制化構(gòu)建類。從特定的場所取得java class,例如數(shù)據(jù)庫中和網(wǎng)絡(luò)中。