類加載器作用
在富裕等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站制作,富裕網(wǎng)站建設(shè)費(fèi)用合理。負(fù)責(zé)將.class文件(存儲的物理文件)加載到內(nèi)存中
類加載的過程
類加載的時機(jī)
創(chuàng)建類的實(shí)例(對象)
調(diào)用嘞的類方法
訪問類或者接口的類變量,或者為該類變量賦值
使用反射方式來強(qiáng)制創(chuàng)建某個類或接口對應(yīng)的java.lang.Class對象
初始化某個類的子類
直接使用java.exe命令來運(yùn)行某個主類
類加載過程
加載
通過包名 + 類名,獲取這個類,準(zhǔn)備用流進(jìn)行傳輸
在這個類加載到內(nèi)存中
加載完畢后創(chuàng)建一個class對象
鏈接(驗(yàn)證-準(zhǔn)備-解析)
驗(yàn)證 (文件中的信息是否符合虛擬機(jī)規(guī)范有沒有安全隱患)
確保Class文件字節(jié)流中包含的信息符合當(dāng)前虛擬機(jī)的要求,并且不會危害虛擬機(jī)自身安全
準(zhǔn)備 (初始化靜態(tài)變量)
負(fù)責(zé)為類的類變量(被static修飾的變量) 分配內(nèi)存,并設(shè)置默認(rèn)初始化值(null)
解析
將類的二進(jìn)制數(shù)據(jù)流中的符號引用替換為直接引用
初始化 (靜態(tài)變量賦值以及初始化其他資源)
根據(jù)程序員通過程序指定的主觀計(jì)劃去初始化類變量和其他資源
類加載器的分類
分類
Bootstrap class loader: 虛擬機(jī)的內(nèi)置類加載器,通常表示為null,并且沒有父null
Platform class loader: 平臺類加載器,負(fù)責(zé)加載JDK中一些特殊的模塊
System class loader: 系統(tǒng)類加載器,負(fù)責(zé)加載用戶類路徑上所指的類庫
類加載器的繼承關(guān)系
System的父加載器為Platform
Platform的父加載器為 Bootstrap
public class ClassLoaderDemo1 {
public static void main(String[] args) {
//獲取系統(tǒng)類加載器
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
//獲取系統(tǒng)類加載器的父加載器 --- 平臺類加載器
ClassLoader classLoader1 = systemClassLoader.getParent();
//獲取平臺類加載器的父加載器 --- 啟動類加載器
ClassLoader classLoader2 = classLoader1.getParent();
System.out.println("系統(tǒng)類加載器" + systemClassLoader);
System.out.println("平臺類加載器" + classLoader1);
System.out.println("啟動類加載器" + classLoader2);
}
}
雙親委派模型
介紹
如果一個類加載器收到了類加載請求,自己并不會去加載,而是委派給父類加載器去執(zhí)行。
如果父類加載器還存在其父類加載器,則進(jìn)一步向上委托,依次遞歸,請求最終到達(dá)頂層的啟動類加載器。
如果父類加載器可以完成類加載任務(wù),就成功返回。
倘若父類加載器無法完成此加載任務(wù),子加載器才會嘗試自己去加載,這就是雙親委派模式
ClassLoader中常用的兩個方法
pubic static ClassLoader getSystemClassLoader() 獲取系統(tǒng)類加載器
public InputStream getResourceAsStream(String name) 加載某個資源文件
public class ClassLoaderTest {
public static void main(String[] args) throws IOException {
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
InputStream is = systemClassLoader.getResourceAsStream("app.properties");
Properties prop = new Properties();
prop.load(is);
System.out.println(prop);
}
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧