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

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

是否每個“新”都會導致至少一個 Classloader.loadClass 調用

是否每個“新”都會導致至少一個 Classloader.loadClass 調用

慕碼人8056858 2021-09-15 15:21:00
我注意到我們可以隨意設置線程的上下文類加載器。這是否意味著new上下文類加載器的 loadClass 被調用的每個結果?
查看完整描述

2 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

不,loadClass()只會在第一次訪問類時調用一次。(這不一定會發生在 上new(),如果您嘗試訪問static類的成員,則可能會發生這種情況。)

在該類的每次后續訪問中,loadClass()都不會被調用。

這是因為每次需要該類時,ClassLoader 都會在findClass()內部調用,它會嘗試查找已加載的類,因此如果該類已加載,則 ClassLoader 會避免loadClass()再次調用。


查看完整回答
反對 回復 2021-09-15
?
縹緲止盈

TA貢獻2041條經驗 獲得超4個贊

類加載器的類加載可以實現為在另一個類引用它時立即加載一個類或延遲加載該類直到需要類初始化,但您應該注意,在某些情況下,行為可能與新的不完全相同,并且其他人可能也一樣。如果 Class 在實際使用之前被加載,它可以在初始化之前放在里面。這可能因JVM而異,但JLS保證在需要靜態初始化時會加載一個類。

對于給定的命名空間,類加載僅執行一次,除非相關類先前已被卸載。因此,等效表達式A.class.getClassLoader().loadClass("B's canonical name")在大多數情況下只會執行一次。換句話說,如果您有兩個表達式 - new A(),則 loadClass 將只執行一次。


查看完整回答
反對 回復 2021-09-15
  • 2 回答
  • 0 關注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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