黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國(guó)咨詢/投訴熱線:400-8080-105
動(dòng)力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) 一文告訴你Java類加載器有哪些

一文告訴你Java類加載器有哪些

更新時(shí)間:2022-07-18 12:44:31 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2349次

Java 類加載器是Java 運(yùn)行時(shí)環(huán)境的一部分,它可以將 Java 類動(dòng)態(tài)加載到Java 虛擬機(jī)中。由于類加載器,Java 運(yùn)行時(shí)系統(tǒng)不需要了解文件和文件系統(tǒng)。

Java 類不會(huì)一次全部加載到內(nèi)存中,而是在應(yīng)用程序需要時(shí)加載。此時(shí),JRE調(diào)用Java ClassLoader,這些 ClassLoader 將類動(dòng)態(tài)加載到內(nèi)存中。

Java 中的類加載器類型

并非所有類都由單個(gè) ClassLoader 加載。根據(jù)類的類型和類的路徑,決定加載該特定類的 ClassLoader。要了解加載類的 ClassLoader,請(qǐng)使用getClassLoader()方法。所有類都根據(jù)它們的名稱加載,如果找不到這些類中的任何一個(gè),則返回NoClassDefFoundError或ClassNotFoundException。

Java 類加載器分為三種類型:

BootStrap ClassLoader:Bootstrap ClassLoader是一個(gè)機(jī)器代碼,它在 JVM 調(diào)用它時(shí)啟動(dòng)操作。它不是一個(gè)java類。它的工作是加載第一個(gè)純Java ClassLoader。Bootstrap ClassLoader 從rt.jar位置加載類。Bootstrap ClassLoader 沒有任何父 ClassLoader。它也被稱為Primodial ClassLoader。

Extension ClassLoader: Extension ClassLoader 是 Bootstrap ClassLoader 的子類,從各自的 JDK Extension 庫中加載核心 java 類的擴(kuò)展。它從jre/lib/ext目錄或系統(tǒng)屬性java.ext.dirs指向的任何其他目錄加載文件。

系統(tǒng)類加載器:應(yīng)用程序類加載器也稱為系統(tǒng)類加載器。它加載在環(huán)境變量CLASSPATH、-classpath 或 -cp 命令行選項(xiàng)中找到的應(yīng)用程序類型類。Application ClassLoader 是 Extension ClassLoader 的子類。

注意:ClassLoader 委托層次模型總是按照 Application ClassLoader->Extension ClassLoader->Bootstrap ClassLoader 的順序運(yùn)行。Bootstrap ClassLoader 總是被賦予更高的優(yōu)先級(jí),其次是 Extension ClassLoader,然后是 Application ClassLoader。

Java ClassLoader 的功能原理

功能原則是Java 類加載器工作的一組規(guī)則或特性。功能的三個(gè)原則,它們是:

委托模型:Java 虛擬機(jī)和 Java 類加載器使用一種稱為委托層次算法的算法將類加載到 Java 文件中。

ClassLoader 基于委托模型給出的一組操作工作。他們是:

ClassLoader 始終遵循委托層次原則。

每當(dāng) JVM 遇到一個(gè)類時(shí),它都會(huì)檢查該類是否已經(jīng)加載。

如果該類已經(jīng)加載到方法區(qū)域中,則 JVM 繼續(xù)執(zhí)行。

如果該類不在方法區(qū)域中,則 JVM 要求 Java ClassLoader Sub-System 加載該特定類,然后 ClassLoader 子系統(tǒng)將控制權(quán)移交給Application ClassLoader。

然后,Application ClassLoader 將請(qǐng)求委托給 Extension ClassLoader,而Extension ClassLoader又將請(qǐng)求委托給Bootstrap ClassLoader。

Bootstrap ClassLoader 將在 Bootstrap 類路徑(JDK/JRE/LIB)中搜索。如果類可用,則加載它,否則將請(qǐng)求委托給 Extension ClassLoader。

Extension ClassLoader 在 Extension Classpath(JDK/JRE/LIB/EXT) 中搜索類。如果類可用,則加載它,否則將請(qǐng)求委托給 Application ClassLoader。

Application ClassLoader 在 Application Classpath 中搜索類。如果該類可用,則加載它,如果不可用,則生成ClassNotFoundException異常。

可見性原則:可見性原則指出,由父類加載器加載的類對(duì)子類加載器可見,但由子類加載器加載的類對(duì)父類加載器不可見。假設(shè)一個(gè)類 GEEKS.class 已被 Extension ClassLoader 加載,那么該類僅對(duì) Extension ClassLoader 和 Application ClassLoader 可見,而對(duì) Bootstrap ClassLoader 不可見。如果再次嘗試使用 Bootstrap ClassLoader 加載該類,則會(huì)給出異常java.lang.ClassNotFoundException。

唯一性屬性:唯一性屬性確保類是唯一的并且沒有類的重復(fù)。這也確保了父類加載器加載的類不會(huì)被子類加載器加載。如果父類加載器無法找到該類,那么只有當(dāng)前實(shí)例會(huì)嘗試自己這樣做。

Java.lang.ClassLoader 的方法

在 JVM 請(qǐng)求類之后,需要執(zhí)行幾個(gè)步驟來加載類。類是根據(jù)委托模型加載的,但有一些重要的方法或函數(shù)在加載類中起著至關(guān)重要的作用。

loadClass(String name, boolean resolve):該方法用于加載JVM引用的類。它將類的名稱作為參數(shù)。這是 loadClass(String, boolean) 類型。

defineClass():defineClass() 方法是最終方法,不能被覆蓋。此方法用于將字節(jié)數(shù)組定義為類的實(shí)例。如果類無效,則拋出ClassFormatError。

findClass(String name):此方法用于查找指定的類。此方法只查找但不加載類。

findLoadedClass(String name):該方法用于驗(yàn)證 JVM 引用的 Class 之前是否已加載。

Class.forName(String name, boolean initialize, ClassLoader loader):該方法用于加載類以及初始化類。此方法還提供了選擇任何一個(gè) ClassLoader 的選項(xiàng)。如果 ClassLoader 參數(shù)為 NULL,則使用 Bootstrap ClassLoader。

示例:在加載類之前執(zhí)行以下代碼:

protected synchronized Class<?>
loadClass(String name, boolean resolve)
	throws ClassNotFoundException
{
	Class c = findLoadedClass(name);
	try {
		if (c == NULL) {
			if (parent != NULL) {
				c = parent.loadClass(name, false);
			}
			else {
				c = findBootstrapClass0(name);
			}
		}
		catch (ClassNotFoundException e)
		{
			System.out.println(e);
		}
	}
}

注意:如果一個(gè)類已經(jīng)被加載,它會(huì)返回它。否則,它將對(duì)新類的搜索委托給父類加載器。如果父類加載器沒有找到該類,loadClass()調(diào)用方法findClass()來查找并加載該類。如果父ClassLoader沒有找到該類, findClass()方法會(huì)在當(dāng)前ClassLoader中搜索該類。如果大家想了解更多相關(guān)知識(shí),不妨來關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面的課程內(nèi)容從入門到精通,很適合零基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助。

提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)

  • 全國(guó)校區(qū) 2025-05-15 搶座中
  • 全國(guó)校區(qū) 2025-06-05 搶座中
  • 全國(guó)校區(qū) 2025-06-26 搶座中
免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 天天综合色天天综合网 | 免费一级欧美大片在线观看 | 黄色短视频免费 | 福利久草 | 天天碰天天干 | 国产丰满眼镜女在线观看 | 久久曹| 国产第一页久久亚洲欧美国产 | 一个人看的在线www高清视频 | 国产在线观看午夜不卡 | 欧美一级爽快片淫片高清在线观看 | 欧美精品hdvdeosex4k | 亚洲精品日本高清中文字幕 | 欧美三级超在线视频 | 亚洲高清成人 | 黄色小视频在线看 | 欧美亚洲性色影视在线 | 中文字幕在线观看 | 91久久精一区二区三区大全 | 高清色惰www日本午夜 | 欧美第一页草草影院 | 精品看片 | 免费人成网站线观看合集 | 在线播放一区二区精品产 | 成年美女黄网站色大免费视频 | 亚洲激情在线播放 | 免费看涩涩视频网站入口 | 在线日韩欧美一区二区三区 | 69人成网站色www | 日韩亚洲人成在线综合日本 | 日本免费三区 | 中文一区二区在线观看 | 国产成人精品系列在线观看 | 欧美极品另类xxx | 色偷偷91久久综合噜噜噜噜 | 天天摸天天爽视频69视频 | 高清欧美不卡一区二区三区 | 精品一区二区三区的国产在线观看 | 国产成人精品综合网站 | 成人观看视频又黄又免费 | 九九视频在线观看 |