Checked exception告訴外部用戶,這個方法在某些情況下可能會拋出這個錯誤,妳應該捕捉並處理這個錯誤,這樣程序才能在可能的情況下繼續運行(當然妳也可以通過throws聲明把異常暴露給上層,但畢竟有壹層是要捕捉這個異常的)。這些錯誤通常是可預測的,可以作為異常流來處理。作為壹種語法強制措施,檢查異常允許您在代碼編譯階段處理異常。
例如,當您打開、讀取或寫入文件時,可能會引發IOException。可以捕獲並提示終端用戶“文件操作失敗,請重試”等信息,而不是讓其拋入JVM導致當前線程掛起。
運行時異常可能在運行時某些不可預知的時刻產生,產生後往往沒有有效的手段進行處理,因此不需要強行聲明和捕獲。
妳可以認為checked exception是強迫妳處理這個異常(不管妳拋出多少層,都會在某個地方接住);運行時異常沒有這個限制,妳可以自由選擇是否捕捉。
= = =分割線= = =
事實上,我認為checked exception是壹個非常2B的設計,這在許多語言中都找不到。API設計不需要這種強制處理錯誤,通過封裝返回值可以更友好的處理。
只是說Groovy這種Java的變種(不完全是變種,但是語法類似)沒有這種痛苦的設計;Scala也沒有。