1. 程式人生 > 其它 >java之自定義異常

java之自定義異常

技術標籤:javajava

概述:根據自己業務的異常情況來定義異常類

異常類如何定義:

1、定義一個編譯期異常:自定義類並繼承於java.lang.Exception

2、自定義一個執行期異常類:自定義類並繼承java.lang.RuntimeException

格式:

public class XXXException extend Exception/RuntimeException{

新增一個空參的構造方法

新增一個帶異常資訊的構造方法

}

注意:

1、自定義異常類一般都是以Exception結尾,說明該類是一個異常類

2、自定義異常類,必須繼承Exception或者RuntimeException

Exception:是編譯期異常,如果方法內部出了該異常就必須處理

RuntimeException:是執行期異常,無需處理,給JVM

通過檢視原始碼發現:所有的異常類都會有一個帶異常資訊的構造方法,方法內部會呼叫父類帶異常資訊的構造方法,讓父類來處理這個異常資訊

演示:

異常類:

演示:
異常類:
public class RegisterException extends RuntimeException/Exception{
空參
    public RegisterException(){
        super();
    }
帶參
    public RegisterException(String message) {
        super(message);
    }
    }


使用:編譯期異常
static String[] usernames = {"張三", "李四", "王五"};

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入使用者名稱");
        String name = sc.next();
            checkUsername(name);
    }

    public static void checkUsername(String name)  {
        for (String username : usernames) {
            if (name.equals(username))
                try {//這裡可以直接throws,讓main方法來try-catch
                    throw new RegisterException("該使用者被註冊");
                } catch (RegisterException e) {
                    e.printStackTrace();
                    return;//結束方法
                }
        }
        System.out.println("恭喜註冊成功");
    }

執行期異常checkUsername方法中不用處理異常
 public static void checkUsername(String name)  {
        for (String username : usernames) {
            if (name.equals(username))
                    throw new RegisterException("該使用者被註冊");
        }
        System.out.println("恭喜註冊成功");
    }

效果: