2016-09-26 32 views
0

我有幾個異常類型,我定義和捕捉(即網絡錯誤,驗證錯誤等) - 現在我基本上想說「趕上我沒有預料到的所有其他異常「。做這個的最好方式是什麼?Java - 趕上所有其他意外的例外

它只是使用通用Excepion e

感謝

+0

是的。或者你可以捕獲Throwable,但這是不明智的 – Kon

回答

7

我會建議編寫所有預期的異常,然後使用異常進行跟蹤,例如,

try 
{ 
} 
catch (expectedException1 e) 
{ 
} 
. 
. 
. 
catch (Exception e) 
{ 
} 

這將有助於您針對您期望的個別異常採取行動,最後,當您獲得異常時,您可以一般處理異常。因爲Exception類位於所有異常的頂部,所以最後需要這樣做。一般規則是,當您沿着列表向下走時,層次結構向頂端

0

異常是「最大」類型的異常是一個應合理趕上的;因爲它涵蓋了任何不是Error

但一個警告:根據你的具體情況,捕捉異常仍然可以是不好的做法。這樣做,通常指示爲一兩件事情:

  1. 你不知道你的代碼是做
  2. 你的代碼是如此複雜,你真的不知道有什麼可能出現的出來

對於這兩種選擇;這是要避免的!

換句話說:捕捉異常是你通常只在很高層次上做的事情 - 在你的應用程序中的較低層次應該完全知道哪些異常來自較低層次;只抓住那些。如果有的話,你真的只想在例外有一個漁獲物(在「遠處」)。因爲:唯一可以在catch塊中執行的操作 - 一些日誌記錄和一條錯誤消息給用戶。

+0

還有第三種選擇,可能是最合理的情況:你有可插拔的功能,你可以很少或根本沒有控制權。 – biziclop

-1

爲了獲得最佳實踐,不應擴展RuntimeException的異常應該被捕獲並處理或拋出。還有setUncaughtExceptionHandler,它可以在java.lang.Thread中設置,您可以使用它作爲'全部收集'

+0

setUncaughtExceptionHandler可以在代碼中與其他可能的異常處理程序中斷。它們非常適合崩潰報告系統。一般來說,你不應該用它來捕捉你所有的異常!而且,如果使用了,一旦我們的工作完成,必須採取適當的謹慎措施將它傳遞給原始異常處理程序。 – prabodhprakash