- 有兩種類型的類加載器:
- Java虛擬機自帶的類加載器
-
根類加載器(Bootstrap帖汞,也叫啟動類加載器)
該加載器沒有父加載器区拳。它所負(fù)責(zé)加載虛擬機的核心類庫,如java.lang.*
等,從系統(tǒng)屬性sun.boot.class.path所指定的目錄中加載類庫叉信,它的實現(xiàn)依賴于底層操作系統(tǒng),屬于虛擬機的實現(xiàn)一部分艘希,它并沒有繼承java.lang.ClassLoader
類硼身。加載的jre\lib\rt.jar硅急。 -
擴(kuò)展類加載器(Extension)
它的父加載器為根類加載器,它從java.ext.dirs系統(tǒng)屬性所指定的目錄中加載類庫佳遂,或者從JDK的安裝目錄的jre\lib\ext子目錄(擴(kuò)展目錄)下加載類庫营袜,如果把用戶創(chuàng)建的JAR文件放在這個目錄下,也會自動由擴(kuò)展類加載器加載讶迁,擴(kuò)展類加載器時純Java類连茧,是java.lang.ClassLoader類的子類。只加載JAR包巍糯。 -
系統(tǒng)(應(yīng)用)類加載器(System)
也稱為應(yīng)用類加載器啸驯,它的父加載器為擴(kuò)展類加載器,它從環(huán)境變量classpath或者系統(tǒng)屬性java.class.path所指定的目錄中加載類祟峦,它是用戶自定義的類加載器的默認(rèn)父加載器罚斗,系統(tǒng)類加載器是純Java類,是java.class.ClassLoader類的子類宅楞。
-
根類加載器(Bootstrap帖汞,也叫啟動類加載器)
- 用戶自定義的類加載器
-
java.lang.ClassLoader
的子類 - 用戶可以定制類的加載方式
-
- Java虛擬機自帶的類加載器
- 數(shù)組類型不是ClassLoader創(chuàng)建的针姿,是由Java runtime創(chuàng)建的。數(shù)組類型的Class.getClassLoader()厌衙,和對應(yīng)的元素類型返回的ClassLoader一樣距淫。如果是原生類型的數(shù)組,是沒有ClassLoader的婶希。
- 類加載器雙親委托模型的好處:
- 可以確保Java核心庫的類型安全榕暇,所有的Java應(yīng)用都至少會引用java.lang.Object類,也就是說在運行期喻杈,java.lang.Object這個類會被加載到Java虛擬機中彤枢,如果這個加載過程是由Java應(yīng)用自己的類加載器所完成的,那么很可能就會在JVM中存在多個版本的java.lang.Object類筒饰,而且這些類之間還是不兼容的缴啡,互相不可見(正是命名空間在發(fā)揮著作用)。
- 可以確保Java核心類庫所提供的類不會被自定義的類所替代瓷们。
- 不同的類加載器可以為相同名稱(binary name)的類創(chuàng)建額外的命名空間业栅。相同的名稱的類可以并存在Java虛擬機中,只需要用不同的類加載器來加載他們即可谬晕。不同的類加載器所加載的類之間是不兼容式镐,這就相當(dāng)于在Java虛擬機內(nèi)部創(chuàng)建了一個又一個互相隔離的Java類空間,這類技術(shù)在很多框架中都得到了實際應(yīng)用固蚤。
-
類加載器的加載
內(nèi)建于JVM中的啟動類加載器會加載java.lang.ClassLoader以及其他的Java平臺類娘汞,當(dāng)JVM啟動時,一塊特殊的機器碼會運行夕玩,它會加載擴(kuò)展類加載器與應(yīng)用類加載器你弦,這塊特殊的機器碼叫做啟動類加載器(bootstrap)惊豺。啟動類加載器并不是Java類,而其他的類加載器則都是Java類禽作,啟動類加載器是特定于平臺的機器指令尸昧,它負(fù)責(zé)開啟整個加載過程。所有類加載器(除了啟動類加載器)都被實現(xiàn)為Java類旷偿。不過總歸要有一個組件來加載第一個Java類加載器烹俗,從而讓整個加載過程能夠順利進(jìn)行下去,加載第一個純Java類加載器就是啟動類加載器的職責(zé)萍程。啟動類加載器還會負(fù)責(zé)加載供JRE正常運行所需要的基本組件幢妄,這包括java.util與java.lang包中的類等等。
類加載器介紹
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進(jìn)店門原探,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乱凿,“玉大人,你說我怎么就攤上這事踢匣。” “怎么了戈抄?”我有些...
- 文/不壞的土叔 我叫張陵离唬,是天一觀的道長。 經(jīng)常有香客問我划鸽,道長输莺,這世上最難降的妖魔是什么? 我笑而不...
- 正文 為了忘掉前任裸诽,我火速辦了婚禮嫂用,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘丈冬。我一直安慰自己嘱函,他們只是感情好,可當(dāng)我...
- 文/花漫 我一把揭開白布埂蕊。 她就那樣靜靜地躺著往弓,像睡著了一般疏唾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上函似,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钟沛!你這毒婦竟也來了畔规?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布牺汤,位于F島的核電站,受9級特大地震影響浩嫌,放射性物質(zhì)發(fā)生泄漏檐迟。R本人自食惡果不足惜,卻給世界環(huán)境...
- 文/蒙蒙 一码耐、第九天 我趴在偏房一處隱蔽的房頂上張望追迟。 院中可真熱鬧,春花似錦骚腥、人聲如沸敦间。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽每瞒。三九已至金闽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剿骨,已是汗流浹背代芜。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- ClassLoader 動態(tài)加載某個 class 文件到內(nèi)存中苹威, 因為我們寫好程序以后昆咽, 不管是 CS 結(jié)構(gòu)還是 ...
- 類加載器是 Java 語言的一個創(chuàng)新,也是 Java 語言流行的重要原因之一牙甫。它使得 Java 類可以被動態(tài)加載到...
- 虛擬機把描述類的數(shù)據(jù)從Class文件加載到內(nèi)存掷酗, 并對數(shù)據(jù)進(jìn)行校驗、轉(zhuǎn)換解析和初始化窟哺, 最終形成可以被虛擬機直接使...
- >少女眼中的世界. 刃起音落浮声,門開聲響。 聞聲扭頭與門外之人四目相對旋奢,認(rèn)出對方身份后先前的安逸心情不復(fù)存在...