2012-06-06 65 views
1
try { 
    MyClass[] myClass = cProxy.getMyClass(); 
    return "" + myClass[0]; 
} catch (Exception e) { 
    // nothing to do 
} 
return "" + MyClass.UNKNOWN; <-- NoClassDefFoundError thrown 

我從其他對象MyClass的對象,我只是想知道爲什麼,而不是線爲什麼在調用類的靜態變量時拋出NoClassDefFoundError?

MyClass[] myClass = cProxy.getMyClass(); 

做了異常拋出時調用MyClass的類的靜態變量「MyClass.UNKNOWN」?

NoClassDefFoundError和ClassNotFoundException的深層含義是什麼?謝謝

回答

1

這裏是關於這兩個例外的java Docs的摘錄。

NoClassDefFoundError: 如果Java虛擬機或ClassLoader實例試圖在類的定義中加載(作爲普通方法調用的一部分,或者作爲使用新表達創建新實例的一部分),並且沒有拋出該異常可以找到該類的定義。 編譯當前正在執行的類時存在搜索到的類定義,但無法再找到該定義。

ClassNotFoundException : 當應用程序試圖使用通過字符串名加載類拋出該異常: •Class類中的forName方法。 •類ClassLoader中的findSystemClass方法。 •類ClassLoader中的loadClass方法。 但可以找到具有指定名稱的類的定義。

1

你在你的try catch塊中捕獲所有異常。 刪除try catch,或者在catch中打印異常,並在使用cProxy.getMyClass()時看到相同的異常;

捕捉所有異常並不是一個好習慣!

+0

NoClassDefFoundError沒有被try..catch塊捕獲,因爲它捕獲異常並且錯誤不是異常子類。 – Averroes

相關問題