9

我研究過:但是,對於未經檢查的異常,編譯器不會強制客戶端程序員捕獲異常或將其聲明在throws子句中。事實上,客戶程序員甚至可能不知道可能拋出異常。例如StringIndexOutOfBoundsException由String的charAt()方法拋出。檢查與未檢查的異常

是什麼意思?

根據該代碼,沒有必要把代碼中的try catch塊, ,但我已經看到編譯器的力量把代碼放在try catch塊中。

我很困惑他們究竟是什麼?

回答

4

你的問題到底是什麼? 編譯器不應該(也不會)強制您嘗試/捕獲未經檢查的異常,這將與它們完全相反。

總的想法是,檢查異常是您可以預見的,但可能基於您無法控制且必須處理的輸入。 未檢查的異常通常會表示程序中的錯誤。

有很多人認爲在Java平臺中檢查異常是一個錯誤,他們只是非常謹慎地使用它們,或者根本不使用它們。您可以通過搜索谷歌閱讀更多關於這場辯論。

16

未檢查的例外是那些延伸RuntimeException類的例外。編譯器絕不會強制您捕獲此類異常,或強制您使用throws關鍵字在方法中聲明它。所有其他異常類型(不擴展RuntimeException)都會被檢查,因此必須聲明爲拋出和/或捕獲。

當您希望方法的調用者(即您的API的用戶)明確處理API中的異常情況時,使用檢查異常。如果您認爲該呼叫能夠對該特殊情況做一些有意義的事情,例如重試呼叫,回滾或將其轉換爲用戶可讀的錯誤消息,則會聲明檢查的異常。

如果您認爲這個調用沒有什麼用處,這個調用可以處理異常(特別是當它代表錯誤或API的錯誤用法時),那麼應該取消選中異常。此外,有太多的checked異常的API,可惱人與編程(例如嘗試使用Java反射API =)

+10

從「錯誤」擴展的異常也未選中。 – stolsvik 2011-01-09 16:33:29

3

這是因爲,

  1. unchecked異常不是程序員的過錯造成的。相反,它們是我們(程序員)不希望對它做太多工作的嚴重後果。
  2. 在檢查異常的情況下,它是由於程序員的錯誤而產生的異常&經常可以由程序員自己解決。

檢查以下幾個環節:

Why RunTime Exceptions are unchecked ?
Checked vs Unchecked Exception ?

+5

這是相反的方式。當一個Excpetion是程序員的錯誤時,它應該被取消選中。 「捕捉」錯誤而不是修復它是毫無意義的。如果它不是程序員錯誤,但是由外部參數引起(例如網絡錯誤),應該檢查它。 – Tomas 2012-05-23 09:25:07

+2

**誤導!**有足夠的代表編輯的人請解決這個問題嗎? – ADTC 2014-06-26 16:14:12

0
  • 未檢查異常,因爲一個編程錯誤的產生。它們並不總是被程序所接受,因爲它們通常需要程序員修改才能修復。
  • 檢查異常不是編程錯誤的結果。相反,它們發生在程序的正常運行中。一個例子是當文件無法打開時拋出的IOException。因爲即使程序沒有錯誤也會發生這些異常,所以有必要告訴程序如何處理異常。