1. 程式人生 > 其它 >JAVA基礎複習-異常處理

JAVA基礎複習-異常處理

異常處理

1、異常處理方式

  • try-catch方式

  • throws方式

    throws + 異常型別,寫在方法的宣告處。指明此方法執行時,可能會丟擲的異常型別。一旦當方法體執行時出現異常,就會在異常處生成一個異常類的物件,此物件滿足throws異常型別時,就會被丟擲。異常後續的程式碼就不再執行。

2、兩種異常處理方式區別

  • try-catch-finally

    真正的將異常給處理掉了。

  • throws

    只是將異常拋給了方法的呼叫者,並沒有真正的將異常處理掉。

3、兩種異常處理方式的選擇

  1. 如果父類中被重寫的方法沒有用throws方式處理異常,則子類重寫的方法也不能用throws處理異常,如果子類重寫的方法中有異常,必須使用try-catch-finally的方式處理。
  2. 執行的方法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、自定義異常

自定義異常步驟:

  1. 繼承於現有的異常類:RuntimeException、Exception等;
  2. 提供全域性常量;
  3. 提供過載的構造器。
/**
 * 自定義異常,繼承Exception
 */
public class MyException extends Exception {
    //網路通訊傳輸時,標識該類唯一
    static final long serialVersionUID = -3387516993124229948L;

    public MyException() {
    }

    public MyException(String msg) {
        //呼叫父類的構造方法處理
        super(msg);
    }
}