一、為什么要有異常機制?
1、在傳統語言C語言中,當你操作資源時,一般是通過函數返回值code來判斷是否執行成功(一般是失敗返回小于零的整數)。
2、腳本語言,比如Python、PHP等,由于沒有返回類型的限制,一般是return false on failed。當然,這些腳本語言也有異常機制。
3、多返回值語言(Golang),一般是通過返回多個值(可能包含error對象),然后通過error值來判斷操作是否成功。
二、總結
??從上面幾個例子可以看出,①返回錯誤碼②返回false等,這些錯誤信息不夠清晰,很多時候也避免不了層層嵌套判斷的漩渦中。③的方式還不錯,不過每次都得check error。
??作為一門靜態語言,java是單返回值、返回類型確定的,當出現異常不能返回指定的類型時(當然,你可以返回null或empty object,但一般不推薦返回null),這個時候異常機制便能很好地解決這個問題。函數調用者只需關心調用這個函數會返回什么,異常需不需要這層處理還是繼續往上拋,可以大大減輕調用者的負擔(如果不需要這層處理,我只需關心api會返回什么,按照自己的邏輯往下寫,并不需要check error,資源釋放推薦使用try-with-resource)
??但是如果是unchecked exception,則必須在doc注明函數會拋什么異常,以便調用者使用,這一點不管是java、python還是php。
當函數無法完成其宣稱的任務的時候拋出異常!