ClassNotFoundException和NoClassDefError之間的區別


ClassNotFoundException發生在裝入階段。 
當應用程序試圖通過類的字符串名稱,使用常規的三種方法裝入類,但卻找不到指定名稱的類定義時就拋出該異常。

NoClassDefFoundError: 當目前執行的類已經編譯,但是找不到它的定義時

也就是說你如果編譯了一個類B,在類A中調用,編譯完成以后,你又刪除掉B,運行A的時候那么就會出現這個錯誤

加載時從外存儲器找不到需要的class就出現ClassNotFoundException 
連接時從內存找不到需要的class就出現NoClassDefFoundError

大概這樣的吧,JDK API里面的解釋 
1.NoClassDefFoundError 
當 Java 虛擬機或 ClassLoader 實例試圖在類的定義中加載(作為通常方法調用的一部分或者作為使用 new 表達式創建的新實例的一部分),但無法找到該類的定義時,拋出此異常。 
當前執行的類被編譯時,所搜索的類定義存在,但無法再找到該定義。

2.ClassNotFoundException 
當應用程序試圖使用以下方法通過字符串名加載類時,拋出該異常: 
* Class 類中的 forName 方法。 
* ClassLoader 類中的 findSystemClass 方法。 
* ClassLoader 類中的 loadClass 方法。 
但是沒有找到具有指定名稱的類的定義。從 1.4 版本開始,此異常已經更新,以符合通用的異常鏈機制。在構造時提供並通過 getException() 方法訪問的“加載類時引發的可選異常”,現在被稱為原因,它可以通過 Throwable.getCause() 方法以及與上面提到的“遺留方法”來訪問。

 

原文:http://www.blogjava.net/leekiang/archive/2007/04/26/113810.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM