2020-10-12
Java培訓
好程序員Java培訓分享Java類加載的過程概述:一. 類的加載概述
當程序要使用某個類時,如果該類還未被加載到內存中,則系統會通過加載、連接、初始化三步來實現對這個類進行初始化。
1. 加載:是將class文件讀入內存,并為之創建一個Class對象。任何類被使用時系統都會建立一個Class對象。
2. 連接:
(1)驗證是否有正確的內部結構,并和其他類協調一致。
(2)準備負責為類的靜態成員分配內存,并設置默認初始化值。
(3)解析將類的二進制數據中的符號引用替換為直接。
3. 初始化:就是我們以前講過的初始化步驟。
二. 類加載時機
當Java程序首次通過下面6種方式使用某個類或接口時,系統會初始化該類或接口。
1. 創建類的實例。
2. 訪問類的靜態變量,或者為靜態變量賦值。
3. 調用類的靜態方法。
4. 初始化某個類的子類。
5. 直接使用Java.exe命令來運行某個主類。
6. 使用反射方式來強制創建某個類或接口對應的Java.lang.Class對象。
三. 類加載器的概述和分類
1. 類加載器負責將.class文件加載到內存中,并為之生成對應的Class項,在Java中,類裝載器把一個類裝入JVM中,要經過以下步驟:
(1)裝載:查找和導入Class文件;
(2)鏈接:把類的二進制數據合并到JRE中;
校驗:檢查載入Class文件數據的正確性;
準備:給類的靜態變量分配存儲空間;
解析:將符號引用轉成直接引用;
(3)初始化:對類的靜態變量,靜態代碼塊執行初始化操作
(4)當JVM啟動時,會形成由三個加載器組成的初始類加載器層次結構:
Bootstrap ClassLoader 根類加載器
Extension ClassLoader 擴展類加載器
System ClassLoader 系統類加載器
2. 類加載器的作用
Bootrap ClassLoader被稱為引導(也稱為原始或跟)類加載器,它負責加載Java的核心類。跟類加載器不是Java.lang.ClassLoader的子類,而是JVM自身實現的。在JDK中JRE的lib目錄下rt.jar文件中。
Extension ClassLoader負責加載JRE拓展目錄中的JAR包的類,它的父類加載器是跟類加載器。在JDK中JRE的lib目錄下ext目錄。
System ClassLoader負責在JVM啟動時加載來自Java命令的-classpath選項、Java.class,path系統屬性,或CLASSPATH指定的jar包和類歷經。系統可通過ClassLoader的靜態方法或區該系統類加載器。如果沒有特別指定,則用戶自定義的類加載器都已類加載器作為父加載器。
四. 反射概述
JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法,同時對于任意一個對象,都能夠調用它的任意一個方法和屬性,這種動態獲取的信息以及動態調用對象方法的功能稱為Java語言的反射機制。
1.要想解剖一個類,必須先要獲取到該類的字節碼文件對象,而解剖使用的就是Class類中的方法,所以先要獲取到每一個字節碼文件對應的Class類型的對象。
2. 每個類被加載后,系統會為該類生成一個對應的Class對象,通過該Class對象可以訪問到JVM中的這個類。
獲得Class對象通常有三種方式:
(1)使用Class類的forName(String clazz)靜態方法。
(2)調用某個類的class屬性來獲取該類的的Class對象。
(3)調用某個對象的getClass()方法,該方法是Object類的一個方法。
開班時間:2021-04-12(深圳)
開班盛況開班時間:2021-05-17(北京)
開班盛況開班時間:2021-03-22(杭州)
開班盛況開班時間:2021-04-26(北京)
開班盛況開班時間:2021-05-10(北京)
開班盛況開班時間:2021-02-22(北京)
開班盛況開班時間:2021-07-12(北京)
預約報名開班時間:2020-09-21(上海)
開班盛況開班時間:2021-07-12(北京)
預約報名開班時間:2019-07-22(北京)
開班盛況Copyright 2011-2023 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號