三霜医、類加載試題

?(1)阿里的面試官問我齿拂,可以不可以自己寫個String類

答案:不可以,因為 根據(jù)類加載的雙親委派機(jī)制肴敛,會去加載父類署海,父類發(fā)現(xiàn)沖突了String就不再加載了;

(2)能否在加載類的時候吗购,對類的字節(jié)碼進(jìn)行修改

答案:可以,使用Java探針技術(shù)砸狞,可以參考:Java探針-Java Agent技術(shù)-阿里面試題

1.什么是類加載器捻勉?

? 類加載器就是Java運行時環(huán)境(Java Runtime Environment)的一部分,負(fù)責(zé)動態(tài)加載Java類到Java虛擬機(jī)的內(nèi)存空間中刀森。恩看了這個介紹就知道了~~~原來平常的.class文件是通過這個加載器踱启,加載到內(nèi)存中的。

2.類加載器的種類以及作用

1)Bootstrap ClassLoader

負(fù)責(zé)加載$JAVA_HOME中jre/lib/rt.jar里所有的class研底,由C++實現(xiàn)埠偿,不是ClassLoader子類

2)Extension ClassLoader

負(fù)責(zé)加載java平臺中擴(kuò)展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目錄下的jar包

3)App ClassLoader(SystemClassLoader)

負(fù)責(zé)記載classpath中指定的jar包及目錄中class

4)Custom ClassLoader

屬于應(yīng)用程序根據(jù)自身需要自定義的ClassLoader榜晦,如tomcat冠蒋、jboss都會根據(jù)j2ee規(guī)范自行實現(xiàn)ClassLoader

OK那么好了,我們現(xiàn)在知道了什么是類加載器以及它的種類及作用了乾胶,那么現(xiàn)在問題來了抖剿,為什么我們自己寫的Sring類能否被加載到呢?我們自己寫一個來看看

首先胚吁,寫了一個跟JAVA自帶的String類一個一樣的String牙躺,包名也一樣就是在構(gòu)造方法里面多了一行輸出。

publicString(){

this.value =newchar[0];

System.out.println("==================");

? ? }

也就是說只要調(diào)用了我們自己寫的String類得話應(yīng)該是有輸出的腕扶,接下來我們來試試:

importjava.lang.String;

publicclassTest{


publicstaticvoidmain(String[] args){

String test =newString();

test ="測試";

?? ?System.out.println(test);

}

}

運行結(jié)果如下:


可以看到調(diào)用的是系統(tǒng)的String類孽拷,沒有輸出。

這是為什么呢半抱?查閱了一些資料終于發(fā)現(xiàn)問題所在脓恕,這就是類加載器的委托機(jī)制。

3.類加載器的委托機(jī)制

? 從JDK1.2開始窿侈,類的加載過程采用父親委托機(jī)制炼幔。這種機(jī)制能更好的保證java平臺的安全。在此委托機(jī)制中史简,除了Java虛擬機(jī)自帶的根類加載器以外乃秀,其余的類加載器都有且只有一個父加載器。當(dāng)Java程序請求加載器loader1加載Sample類時圆兵,loader1首先委托自己的父加載器去加載Sample類跺讯,若父加載器能加載,則由父加載器完成加載任務(wù)殉农,否則才由加載器loader1本身加載Sample類刀脏。

好吧~~~這下看明白了類加載器有個加載順序我們來看一下這個加載順序


加載過程中會先檢查類是否被已加載,檢查順序是自底向上超凳,從Custom ClassLoader到BootStrap ClassLoader逐層檢查愈污,只要某個classloader已加載就視為已加載此類耀态,保證此類只所有ClassLoader加載一次。而加載的順序是自頂向下暂雹,也就是說當(dāng)發(fā)現(xiàn)這個類沒有的時候會先去讓自己的父類去加載首装,父類沒有再讓兒子去加載,那么在這個例子中我們自己寫的String應(yīng)該是被Bootstrap ClassLoader加載了擎析,所以App ClassLoader就不會再去加載我們寫的String類了簿盅,導(dǎo)致我們寫的String類是沒有被加載的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末揍魂,一起剝皮案震驚了整個濱河市桨醋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌现斋,老刑警劉巖喜最,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異庄蹋,居然都是意外死亡瞬内,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門限书,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虫蝶,“玉大人,你說我怎么就攤上這事倦西∧苷妫” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵扰柠,是天一觀的道長粉铐。 經(jīng)常有香客問我,道長卤档,這世上最難降的妖魔是什么蝙泼? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮劝枣,結(jié)果婚禮上汤踏,老公的妹妹穿的比我還像新娘。我一直安慰自己舔腾,他們只是感情好溪胶,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著琢唾,像睡著了一般载荔。 火紅的嫁衣襯著肌膚如雪盾饮。 梳的紋絲不亂的頭發(fā)上采桃,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天懒熙,我揣著相機(jī)與錄音,去河邊找鬼普办。 笑死工扎,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的衔蹲。 我是一名探鬼主播肢娘,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼舆驶!你這毒婦竟也來了橱健?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤沙廉,失蹤者是張志新(化名)和其女友劉穎拘荡,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撬陵,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡珊皿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了巨税。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蟋定。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖草添,靈堂內(nèi)的尸體忽然破棺而出驶兜,到底是詐尸還是另有隱情,我是刑警寧澤果元,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布促王,位于F島的核電站,受9級特大地震影響而晒,放射性物質(zhì)發(fā)生泄漏蝇狼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一倡怎、第九天 我趴在偏房一處隱蔽的房頂上張望迅耘。 院中可真熱鬧,春花似錦监署、人聲如沸颤专。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栖秕。三九已至,卻和暖如春晓避,著一層夾襖步出監(jiān)牢的瞬間簇捍,已是汗流浹背只壳。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留暑塑,地道東北人吼句。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像事格,于是被迫代替她去往敵國和親惕艳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容