JAVA 中為什麼 必須使用 try Catch
阿新 • • 發佈:2019-02-11
核心原因:語言設計者覺得這樣設計是最好的,O(∩_∩)O~
至於為什麼python不是這麼設計的,C#不是這麼設計的,核心原因也是他們的語言設計者覺得不用catch異常是最好的,O(∩_∩)O~
那到底是顯式去處理更好,還是不用顯式去處理更好呢?
我來談一下我的個人見解:
首先我們來定義什麼叫異常,java中設計了兩種型別的異常:checked exception和unchecked exception(即runtimeException),checked exception是需要顯式捕獲的,他向上層程式碼傳遞了一些資訊,比如你校驗使用者登陸的時候,如果使用者名稱在資料庫中查不到,你可以丟擲UserNotFoundException(定義為checked exception)來給上層程式碼傳遞這個User not found的資訊,比如密碼不對,可以建立一個PasswordErrorException。
再來說說RuntimeException,這種異常不需要顯式捕獲,比如IllegalArgumentException(引數不合法),DivideZeroException(除以0的異常),這種異常更像是一個錯誤的呼叫方法導致的,它在給上層程式碼傳遞的資訊是:你用了一個很不對的方法在呼叫我,這是錯誤的,後果很嚴重哦,你如果沒有防範措施(沒有顯式捕獲),我可是會讓終止這次方法呼叫鏈哦
至於為什麼python不是這麼設計的,C#不是這麼設計的,核心原因也是他們的語言設計者覺得不用catch異常是最好的,O(∩_∩)O~
那到底是顯式去處理更好,還是不用顯式去處理更好呢?
我來談一下我的個人見解:
首先我們來定義什麼叫異常,java中設計了兩種型別的異常:checked exception和unchecked exception(即runtimeException),checked exception是需要顯式捕獲的,他向上層程式碼傳遞了一些資訊,比如你校驗使用者登陸的時候,如果使用者名稱在資料庫中查不到,你可以丟擲UserNotFoundException(定義為checked exception)來給上層程式碼傳遞這個User not found的資訊,比如密碼不對,可以建立一個PasswordErrorException。
再來說說RuntimeException,這種異常不需要顯式捕獲,比如IllegalArgumentException(引數不合法),DivideZeroException(除以0的異常),這種異常更像是一個錯誤的呼叫方法導致的,它在給上層程式碼傳遞的資訊是:你用了一個很不對的方法在呼叫我,這是錯誤的,後果很嚴重哦,你如果沒有防範措施(沒有顯式捕獲),我可是會讓終止這次方法呼叫鏈哦
對異常這個概念大家本身就沒有一個統一的認識,比如python的設計者覺得:往上層程式碼傳遞資訊根本不用checked exception,直接用多個方法返回值就可以了,所以他就只設計了第二種異常