您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java類加載是如何執行的”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Java類加載是如何執行的”文章能幫助大家解決問題。
類加載器作用
負責將.class文件(存儲的物理文件)加載到內存中
類加載器過程
加載:通過全類名獲取這個類準備用流傳輸,加載進內存,加載完畢創建一個Class對象
鏈接
驗證:確保Class文件字節流中包含的信息符合當前虛擬機的要求,并且不會危害虛擬機自身安全
(文件中的信息是否符合虛擬機規范有沒有安全隱患)準備:負責為類的類變量(被static修飾的變量)分配內存,并設置默認初始化值
(初始化靜態變量)解析:將類的二進制數據流中的符號引用替換為直接引用
(本類中如果用到了其他類,此時就需要找到對應的類)
初始化:根據程序員通過程序制定的主觀計劃去初始化類變量和其他資源(也就是自己寫的構造函數初始化)
(靜態變量賦值以及初始化其他資源)
類加載分類
Bootstrap class loader:虛擬機的內置類加載器,通常表示為null ,并且沒有父null
Platform class loader:平臺類加載器,負責加載JDK中一些特殊的模塊
System class loader:系統類加載器,負責加載用戶類路徑上所指定的類庫
類加載器繼承關系
System的父加載器為Platform
Platform的父加載器為Bootstrap
public class ClassLoaderDemo1 {
public static void main(String[] args) {
//獲取系統類加載器
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
//獲取系統類加載器的父加載器 --- 平臺類加載器
ClassLoader classLoader1 = systemClassLoader.getParent();
//獲取平臺類加載器的父加載器 --- 啟動類加載器
ClassLoader classLoader2 = classLoader1.getParent();
System.out.println("系統類加載器" + systemClassLoader);
System.out.println("平臺類加載器" + classLoader1);
System.out.println("啟動類加載器" + classLoader2);
}
}
雙親委派模型
如果一個類加載器收到了類加載請求,它并不會自己先去加載,而是把這個請求委托給父類的加載器去執行,如果父類加載器還存在其父類加載器,則進一步向上委托,依次遞歸,請求最終將到達頂層的啟動類加載器,如果父類加載器可以完成類加載任務,就成功返回,倘若父類加載器無法完成此加載任務,子加載器才會嘗試自己去加載,這就是雙親委派模式(一句話意思就是加載類先讓父類的加載器去加載,如果父類加載不了就會重新向下讓子類加載器依次去加載知道找到加載的類加載器)
方法介紹
方法名 | 說明 |
public static ClassLoader getSystemClassLoader() | 獲取系統類加載器 |
public InputStream getResourceAsStream(String name) | 加載某一個資源文件 |
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Demo {
public static void main(String[] args) throws IOException {
//獲取系統類加載器
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
//利用加載器去加載一個指定的文件
//參數:文件的路徑(放在src的根目錄下,默認去那里加載)
//返回值:字節流。
InputStream is = systemClassLoader.getResourceAsStream("prop.properties");
Properties prop = new Properties();
prop.load(is);
System.out.println(prop.getProperty("name"));
is.close();
}
}
關于“Java類加載是如何執行的”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。