天天看點

JDK1.9-自定義異常

自定義異常

3.1 概述

為什麼需要自定義異常類:

我們說了Java中不同的異常類,分别表示着某一種具體的異常情況,那麼在開發中總是有些異常情況是SUN沒有定義好的,此時我們根據自己業務的異常情況來定義異常類。例如年齡負數問題,考試成績負數問題等等。

在上述代碼中,發現這些異常都是JDK内部定義好的,但是實際開發中也會出現很多異常,這些異常很可能在JDK中沒有定義過,例如年齡負數問題,考試成績負數問題.那麼能不能自己定義異常呢?

什麼是自定義異常類:

在開發中根據自己業務的異常情況來定義異常類.

自定義一個業務邏輯異常: RegisterException。一個注冊異常類。

異常類如何定義:

  1. 自定義一個編譯期異常: 自定義類 并繼承于

    java.lang.Exception

  2. 自定義一個運作時期的異常類:自定義類 并繼承于

    java.lang.RuntimeException

3.2 自定義異常的練習

// 業務邏輯異常
public class RegisterException extends Exception {
    /**
     * 空參構造
     */
    public RegisterException() {
    }

    /**
     *
     * @param message 表示異常提示
     */
    public RegisterException(String message) {
        super(message);
    }
}
           
public class Demo {
    // 模拟資料庫中已存在賬号
    private static String[] names = {"bill","hill","jill"};
   
    public static void main(String[] args) {     
        //調用方法
        try{
              // 可能出現異常的代碼
            checkUsername("nill");
            System.out.println("注冊成功");//如果沒有異常就是注冊成功
        }catch(RegisterException e){
            //處理異常
            e.printStackTrace();
        }
    }

    //判斷目前新增賬號是否存在
    //因為是編譯期異常,又想調用者去處理 是以聲明該異常
    public static boolean checkUsername(String uname) throws LoginException{
        for (String name : names) {
            if(name.equals(uname)){//如果名字在這裡面 就抛出登陸異常
                throw new RegisterException("親"+name+"已經被注冊了!");
            }
        }
        return true;
    }
}