亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

到底哪個class里面的代碼會執行呢?

到底哪個class里面的代碼會執行呢?

繁星coding 2022-10-02 14:10:20
背景1:我們知道java中類加載機制采用雙親委托制機制,一個classloader要加載一個類,首先會委托他的上級加載器嘗試加載,如果上級加載不成功才會自己加載。背景2:我們自己的類的加載器是AppClassLoader,它的上級是ExtClassLoader。ExtClassLoader會在%JAVA_HONME%/jre/lib/ext目錄中尋找、加載類。背景3:我自己寫了一個Test.java,編譯后為Test.class。按背景2,Test的加載器是AppClassLoader,再根據背景1,它會首先委托ExtClassLoader去嘗試加載。ExtClassLoader在%JAVA_HONME%/jre/lib/ext中找不到該類,故加載失敗,所以最終還是會由AppClassLoader來加載Test.class。問題:可是,如果我把編譯好的Test.class打成jar包,放到%JAVA_HONME%/jre/lib/ext目錄中,那么當AppClassLoader委托給ExtClassLoader加載時,ExtClassLoader會加載成功嗎?這個問題困擾我的地方在于,按照背景2,貌似的確應該由ExtClassLoader去加載Test。但我感覺這違反直覺,我要運行的是本地的Test.class,但是JVM卻加載了另一個Test.class(%JAVA_HONME%/jre/lib/ext下),那么本地這個Test.class還有什么意義?
查看完整描述

1 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

ext下面的類會被優先加載,這沒什么違背直覺的啊,或者說是你把Test拷到ext里面是違背直覺的,反過來想如果你在自己的工程里面寫個java.lang.String,jvm也會優先加載上級loader下面的String.class,要不怎么保證jvm的安全性

查看完整回答
反對 回復 2022-10-06
  • 1 回答
  • 0 關注
  • 128 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號