簡體   English   中英

捕獲錯誤(非異常)是否有任何意義,因為JVM不會啟動程序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM