2 回答

TA貢獻1821條經(jīng)驗 獲得超5個贊
不,loadClass()
只會在第一次訪問類時調(diào)用一次。(這不一定會發(fā)生在 上new()
,如果您嘗試訪問static
類的成員,則可能會發(fā)生這種情況。)
在該類的每次后續(xù)訪問中,loadClass()
都不會被調(diào)用。
這是因為每次需要該類時,ClassLoader 都會在findClass()
內(nèi)部調(diào)用,它會嘗試查找已加載的類,因此如果該類已加載,則 ClassLoader 會避免loadClass()
再次調(diào)用。

TA貢獻2041條經(jīng)驗 獲得超4個贊
類加載器的類加載可以實現(xiàn)為在另一個類引用它時立即加載一個類或延遲加載該類直到需要類初始化,但您應該注意,在某些情況下,行為可能與新的不完全相同,并且其他人可能也一樣。如果 Class 在實際使用之前被加載,它可以在初始化之前放在里面。這可能因JVM而異,但JLS保證在需要靜態(tài)初始化時會加載一個類。
對于給定的命名空間,類加載僅執(zhí)行一次,除非相關類先前已被卸載。因此,等效表達式A.class.getClassLoader().loadClass("B's canonical name")在大多數(shù)情況下只會執(zhí)行一次。換句話說,如果您有兩個表達式 - new A(),則 loadClass 將只執(zhí)行一次。
添加回答
舉報