溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java中怎么實(shí)現(xiàn)動(dòng)態(tài)載入

發(fā)布時(shí)間:2021-07-02 14:47:40 來(lái)源:億速云 閱讀:139 作者:Leah 欄目:編程語(yǔ)言

java中怎么實(shí)現(xiàn)動(dòng)態(tài)載入,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

java動(dòng)態(tài)載入class的兩種方式:

implicit隱式,即利用實(shí)例化才載入的特性來(lái)java動(dòng)態(tài)載入入class

explicit顯式方式,又分兩種方式:

java.lang.Class的forName()方法

java.lang.ClassLoader的loadClass()方法

用Class.forName加載類

Class.forName使用的是被調(diào)用者的類加載器來(lái)加載類的。

這種特性, 證明了java類加載器中的名稱空間是***的, 不會(huì)相互干擾。

即在一般情況下, 保證同一個(gè)類中所關(guān)聯(lián)的其他類都是由當(dāng)前類的類加載器所加載的。

public static Class forName(String className)  throws ClassNotFoundException {  return forName0(className, true , ClassLoader.getCallerClassLoader());  }  /** Called after security checks have been made. */  private static native Class forName0(String name, boolean initialize,  ClassLoader loader)  throws ClassNotFoundException;

Java代碼

public static Class forName(String className)  throws ClassNotFoundException {  return forName0(className, true , ClassLoader.getCallerClassLoader());  }  /** Called after security checks have been made. */  private static native Class forName0(String name, boolean initialize,  ClassLoader loader)  throws ClassNotFoundException;

上面中 ClassLoader.getCallerClassLoader 就是得到調(diào)用當(dāng)前forName方法的類的類加載器

static塊在什么時(shí)候執(zhí)行?

當(dāng)調(diào)用forName(String)載入class時(shí)執(zhí)行,如果調(diào)用ClassLoader.loadClass并不會(huì)執(zhí)行.forName(String,false,ClassLoader)時(shí)也不會(huì)執(zhí)行,如果載入Class時(shí)沒(méi)有執(zhí)行static塊則在***次實(shí)例化時(shí)執(zhí)行.比如new ,Class.newInstance()操作static塊僅執(zhí)行一次,各個(gè)java類由哪些classLoader加載?

  • Java多線程調(diào)試如何完成信息輸出處理

  • Java系統(tǒng)線程組如何才能安全組建

  • Java Runnable接口如何進(jìn)行代碼編寫(xiě)

  • Java線程檢測(cè)基本的問(wèn)題猜想

  • Java類加載器特點(diǎn)的具體介紹

java類可以通過(guò)實(shí)例.getClass.getClassLoader()得知

接口由AppClassLoader(System ClassLoader,可以由ClassLoader.getSystemClassLoader()獲得實(shí)例)載入

ClassLoader類由bootstrap loader載入

NoClassDefFoundError和ClassNotFoundException

NoClassDefFoundError:當(dāng)java源文件已編譯成.class文件,但是ClassLoader在運(yùn)行期間在其搜尋路徑load某個(gè)類時(shí),沒(méi)有找到.class文件則報(bào)這個(gè)錯(cuò)

ClassNotFoundException:試圖通過(guò)一個(gè)String變量來(lái)創(chuàng)建一個(gè)Class類時(shí)不成功則拋出這個(gè)異常,以上就是對(duì)java動(dòng)態(tài)載入的詳細(xì)介紹。

關(guān)于java中怎么實(shí)現(xiàn)動(dòng)態(tài)載入問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI