我研究過:但是,對於未經檢查的異常,編譯器不會強制客戶端程序員捕獲異常或將其聲明在throws子句中。事實上,客戶程序員甚至可能不知道可能拋出異常。例如StringIndexOutOfBoundsException
由String的charAt()
方法拋出。檢查與未檢查的異常
是什麼意思?
根據該代碼,沒有必要把代碼中的try catch塊, ,但我已經看到編譯器的力量把代碼放在try catch塊中。
我很困惑他們究竟是什麼?
我研究過:但是,對於未經檢查的異常,編譯器不會強制客戶端程序員捕獲異常或將其聲明在throws子句中。事實上,客戶程序員甚至可能不知道可能拋出異常。例如StringIndexOutOfBoundsException
由String的charAt()
方法拋出。檢查與未檢查的異常
是什麼意思?
根據該代碼,沒有必要把代碼中的try catch塊, ,但我已經看到編譯器的力量把代碼放在try catch塊中。
我很困惑他們究竟是什麼?
你的問題到底是什麼? 編譯器不應該(也不會)強制您嘗試/捕獲未經檢查的異常,這將與它們完全相反。
總的想法是,檢查異常是您可以預見的,但可能基於您無法控制且必須處理的輸入。 未檢查的異常通常會表示程序中的錯誤。
有很多人認爲在Java平臺中檢查異常是一個錯誤,他們只是非常謹慎地使用它們,或者根本不使用它們。您可以通過搜索谷歌閱讀更多關於這場辯論。
未檢查的例外是那些延伸RuntimeException
類的例外。編譯器絕不會強制您捕獲此類異常,或強制您使用throws
關鍵字在方法中聲明它。所有其他異常類型(不擴展RuntimeException
)都會被檢查,因此必須聲明爲拋出和/或捕獲。
當您希望方法的調用者(即您的API的用戶)明確處理API中的異常情況時,使用檢查異常。如果您認爲該呼叫能夠對該特殊情況做一些有意義的事情,例如重試呼叫,回滾或將其轉換爲用戶可讀的錯誤消息,則會聲明檢查的異常。
如果您認爲這個調用沒有什麼用處,這個調用可以處理異常(特別是當它代表錯誤或API的錯誤用法時),那麼應該取消選中異常。此外,有太多的checked異常的API,可惱人與編程(例如嘗試使用Java反射API =)
這是因爲,
檢查以下幾個環節:
Why RunTime Exceptions are unchecked ?
Checked vs Unchecked Exception ?
從「錯誤」擴展的異常也未選中。 – stolsvik 2011-01-09 16:33:29