(一)類的加載概述
當程序要使用某個類時,如果該類還未被加載到內存中,則系統會通過加載,連接,初始化三步來實現對這個類進行初始化。
(1)加載 :指將class文件讀入內存,併爲之創建一個Class對象。任何類被使用時系統都會建立一個Class對象;
(2)連接:驗證 是否有正確的內部結構,並和其他類協調一致;爲類的靜態成員分配內存,並設置默認初始化值;將類的二進制數據中的符號引用替換爲直接引用(解析)
(3)初始化。
(二)類的加載時機
(1)創建類的實例時;
(2)訪問類的靜態變量,或者爲靜態變量賦值;
(3)調用類的靜態方法;
(4)使用反射方式來強制創建某個類或接口對應的java.lang.Class對象;
(5)初始化某個類的子類;
(6)直接使用java.exe命令來運行某個主類。
現在瞭解到類的加載時機後,在來研究一下類的加載機制
加載機制依靠的是類加載器,
首先,什麼是類加載器?類加載器就是負責將.class文件加載到內存中,併爲之生成對應的Class對象。雖然我們不需要關心類加載機制,但是瞭解這個機制我們就能更好的理解程序的運行。
那麼在來研究一下類加載器都有哪些,作用分別是什麼?
(1)Bootstrap ClassLoader 根類加載器:也被稱爲引導類加載器,負責Java核心類的加載,比如System,String等。在JDK中JRE的lib目錄下rt.jar文件中。
(2)Extension ClassLoader 擴展類加載器:負責JRE的擴展目錄中jar包的加載。在JDK中JRE的lib目錄下ext目錄。
(3)Sysetm ClassLoader 系統類加載器:負責在JVM啓動時加載來自java命令的class文件,以及classpath環境變量所指定的jar包和類路徑。
以上是查閱好多資料和參考其他來源資料總結的理論知識,如有問題,請予以指導!