ClassNotFoundException和NoClassDefError之間的區(qū)別
Posted on 2007-04-26 15:55 leekiang 閱讀(6240) 評(píng)論(4) 編輯 收藏 所屬分類: javaClassNotFoundException發(fā)生在裝入階段。
當(dāng)應(yīng)用程序試圖通過(guò)類的字符串名稱,使用常規(guī)的三種方法裝入類,但卻找不到指定名稱的類定義時(shí)就拋出該異常。
NoClassDefFoundError: 當(dāng)目前執(zhí)行的類已經(jīng)編譯,但是找不到它的定義時(shí)
也就是說(shuō)你如果編譯了一個(gè)類B,在類A中調(diào)用,編譯完成以后,你又刪除掉B,運(yùn)行A的時(shí)候那么就會(huì)出現(xiàn)這個(gè)錯(cuò)誤
加載時(shí)從外存儲(chǔ)器找不到需要的class就出現(xiàn)ClassNotFoundException
連接時(shí)從內(nèi)存找不到需要的class就出現(xiàn)NoClassDefFoundError
大概這樣的吧,JDK API里面的解釋
1.NoClassDefFoundError
當(dāng) Java 虛擬機(jī)或 ClassLoader 實(shí)例試圖在類的定義中加載(作為通常方法調(diào)用的一部分或者作為使用 new 表達(dá)式創(chuàng)建的新實(shí)例的一部分),但無(wú)法找到該類的定義時(shí),拋出此異常。
當(dāng)前執(zhí)行的類被編譯時(shí),所搜索的類定義存在,但無(wú)法再找到該定義。
2.ClassNotFoundException
當(dāng)應(yīng)用程序試圖使用以下方法通過(guò)字符串名加載類時(shí),拋出該異常:
* Class 類中的 forName 方法。
* ClassLoader 類中的 findSystemClass 方法。
* ClassLoader 類中的 loadClass 方法。
但是沒(méi)有找到具有指定名稱的類的定義。從 1.4 版本開(kāi)始,此異常已經(jīng)更新,以符合通用的異常鏈機(jī)制。在構(gòu)造時(shí)提供并通過(guò) getException() 方法訪問(wèn)的“加載類時(shí)引發(fā)的可選異常”,現(xiàn)在被稱為原因,它可以通過(guò) Throwable.getCause() 方法以及與上面提到的“遺留方法”來(lái)訪問(wèn)。
見(jiàn)http://www.javaeye.com/topic/21141?page=1