1. 程式人生 > >00108_類加載器

00108_類加載器

類的加載 類初始化 jvm 之前 通過 直接 內存 文件中 loader

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_類加載器