JAVA基礎複習-異常處理
阿新 • • 發佈:2022-01-02
異常處理
1、異常處理方式
-
try-catch方式
-
throws方式
throws + 異常型別,寫在方法的宣告處。指明此方法執行時,可能會丟擲的異常型別。一旦當方法體執行時出現異常,就會在異常處生成一個異常類的物件,此物件滿足throws異常型別時,就會被丟擲。異常後續的程式碼就不再執行。
2、兩種異常處理方式區別
-
try-catch-finally
真正的將異常給處理掉了。
-
throws
只是將異常拋給了方法的呼叫者,並沒有真正的將異常處理掉。
3、兩種異常處理方式的選擇
- 如果父類中被重寫的方法沒有用throws方式處理異常,則子類重寫的方法也不能用throws處理異常,如果子類重寫的方法中有異常,必須使用try-catch-finally的方式處理。
- 執行的方法a()中,先後呼叫了另外的幾個方法,這幾個方法時通過遞進關係執行的。建議這幾個方法的異常使用throws方式進行處理,而執行的方法a()可以使用try-catch-finally的方式處理。
4、手動丟擲異常物件
-
手動丟擲Exception型別異常
方法中手動丟擲Exception型別異常,則方法中必須使用throws方式處理異常,且呼叫者必須對該異常進行處理,使用try-catch或者throws繼續丟擲此異常。
-
手動丟擲RuntimeException型別異常
呼叫者不用對該執行時異常進行處理,程式執行時遇到異常後,自動丟擲到控制檯。
/** * 手動丟擲異常 */ public class testException { public static void main(String[] args) { Student student = new Student(); try { student.addStudent(-1); } catch (Exception e) { //輸出異常處理資訊 System.out.println(e.getMessage()); } } } /** * 手動丟擲Exception異常 */ class Student { private Integer age; public void addStudent(Integer age) throws Exception { if (age > 0) { this.age = age; } else { throw new Exception("年齡必須大於0"); } } } class testException2 { public static void main(String[] args) { Student2 student = new Student2(); student.addStudent(-1); } } /** * 手動丟擲RuntimeException異常 */ class Student2 { private Integer age; public void addStudent(Integer age) { if (age > 0) { this.age = age; } else { throw new RuntimeException("年齡必須大於0"); } } }
5、自定義異常
自定義異常步驟:
- 繼承於現有的異常類:RuntimeException、Exception等;
- 提供全域性常量;
- 提供過載的構造器。
/** * 自定義異常,繼承Exception */ public class MyException extends Exception { //網路通訊傳輸時,標識該類唯一 static final long serialVersionUID = -3387516993124229948L; public MyException() { } public MyException(String msg) { //呼叫父類的構造方法處理 super(msg); } }