2014-05-02 27 views
0

發起任何意義我來自question知道,當一些ErrorNoClassDefFoundError發生在Java中是否存在被捕獲錯誤(無異常)的程序將不會被JVM

這是一個非常嚴重錯誤,因爲程序不能由JVM啓動。

然後:

try { 
    //statements 
} catch (NoClassDefFoundError e) { // catching NoClassDefFoundError 
    e.printStackTrace(); 
    //do something when Error occurred 
} catch(Error e){ // catching Error 
    e.printStackTrace(); 
    //do something when Error occurred 
}catch (Exception e) { 
    e.printStackTrace(); 
    //do something when Exception occurred 
} 

問題:

  • 是否通過有任何意義趕上在TR Error y捕獲塊,因爲程序不會由JVM啓動,這些塊會執行嗎?

  • 如果不是那麼爲什麼在Java中允許Error的捕獲機制。如果是,那麼何時以及如何?

+0

發生錯誤時做什麼?無論是錯誤還是異常,您會如何處理這樣的問題? –

+0

可能重複[何時趕上java.lang.Error?](http://stackoverflow.com/questions/352780/when-to-catch-java-lang-error) – Raedwald

回答

1

您可以發現錯誤。但是,通常你不應該這樣做,因爲在大多數情況下,你無法做任何事情。如果發生錯誤,幾乎總是遲到才能做任何事情。在極少數情況下可能會在雖則捕捉錯誤是有用的:在java中When to catch java.lang.Error?

1

異常處理是爲了處理冒險行爲在你的計劃,但Errors代表嚴肅的事情,不應該被逮住。

一般來說,建議您不要錯過Errors,但只有Exceptions(選中或不選中)。下面是從Java API線​​:

一個錯誤是Throwable的子類,表示嚴重的問題,合理的應用程序不應該試圖捕獲。大多數此類錯誤都是異常情況。 ThreadDeath錯誤雖然是一個「正常」條件,但也是Error的一個子類,因爲大多數應用程序不應該試圖捕獲它。

的方法不需要在其throws子句中可能的方法的執行過程中被拋出,但沒有捕獲錯誤的任何子類申報,因爲這些錯誤是不應該出現的異常情況。也就是說,出於編譯時檢查異常的目的,Error及其子類被視爲未經檢查的異常。

0

在您使用自定義類加載器加載類的情況下,可能存在插件罐的場景(例如,自定義類加載器用於從這些罐加載類,這些罐由用戶創建)在上課時可能會表現不正常。在這些時候,抓住這些錯誤並記錄它們是很好的。

正如其他人指出的那樣,您對此無能爲力。