[英]Is there any significance by catching Error(not Exception) as the program will not be initiated by the JVM
我從問題中得知,當Java中出現類似NoClassDefFoundError
Error
時
這是一個非常嚴重的錯誤,因為程序無法由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
}
問題:
通過在try catch塊中捕獲
Error
是否有任何意義,因為JVM不會啟動程序,這些塊是否會執行?如果沒有,那么為什么在Java中允許捕獲
Error
機制。 如果是,那么何時以及如何?
你可以發現錯誤。 但是,通常你不應該這樣做,因為在大多數情況下你無法做任何事情。 如果發生錯誤,幾乎總是遲到做任何事情。 在一些罕見的情況下,可能有助於捕獲錯誤: 何時捕獲java.lang.Error?
java中的異常處理意味着處理程序中的危險行為 ,但Errors
代表嚴重的問題,不應該被捕獲。
一般來說,不建議捕獲Errors
,只捕獲Exceptions
(已選中或未選中)。 以下是來自JAVA API for Error
:
Error是Throwable的子類,表示合理的應用程序不應該嘗試捕獲的嚴重問題。 大多數此類錯誤都是異常情況。 ThreadDeath錯誤,雖然是“正常”條件,但也是Error的子類,因為大多數應用程序不應該嘗試捕獲它。
一個方法不需要在其throws子句中聲明在執行方法期間可能拋出但未捕獲的任何Error類,因為這些錯誤是永遠不應發生的異常情況。 也就是說,出於編譯時異常檢查的目的,Error及其子類被視為未經檢查的異常。
在使用自定義類加載器加載類的情況下,可能存在這樣的場景,其中插件jar(例如,自定義類加載器用於從這些jar加載類並且這些jar由用戶創建)在類加載期間可能表現不正常。 在這些時間點,捕獲這些錯誤並記錄它們是很好的。
正如其他人所指出的那樣,你無能為力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.