00108_類加載器
1、類的加載
(1)當程序要使用某個類時,如果該類還未被加載到內存中,則系統會通過加載,連接,初始化三步來實現對這個類進行初始化;
(2)加載:就是指將class文件讀入內存,並為之創建一個Class對象,任何類被使用時系統都會建立一個Class對象;
(3)連接
①驗證:是否有正確的內部結構,並和其他類協調一致;
②準備:負責為類的靜態成員分配內存,並設置默認初始化值;
③解析:將類的二進制數據中的符號引用替換為直接引用。
(4)初始化:就是之前講過的初始化步驟;
2、類初始化時機
(1)創建類的實例;
(2)類的靜態變量,或者為靜態變量賦值;
(3)類的靜態方法;
(4) 使用反射方式來強制創建某個類或接口對應的java.lang.Class對象;
(5)初始化某個類的子類;
(6)直接使用java.exe命令來運行某個主類。
3、類加載器
(1)負責將.class文件加載到內存中,並為之生成對應的Class對象;
(2)雖然我們不需要關心類加載機制,但是了解這個機制我們就能更好的理解程序的運行。
4、類加載器的組成
(1)Bootstrap ClassLoader 根類加載器,也被稱為引導類加載器,負責Java核心類的加載,比如System,String等,在JDK中JRE的lib目錄下rt.jar文件中;
(2)Extension ClassLoader 擴展類加載器,負責JRE的擴展目錄中jar包的加載,在JDK中JRE的lib目錄下ext目錄;
(3)System ClassLoader 系統類加載器,負責在JVM啟動時加載來自java命令的class文件,以及classpath環境變量所指定的jar包和類路徑;
00108_類加載器