Java異常處理機制(三):自定義異常

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

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

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

什麼是自定義異常類:

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

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

異常類如何定義:

  • 自定義一個編譯期異常: 自定義類 並繼承於java.lang.Exception。(編譯異常一定要throws或者try catch處理
  • 自定義一個運行時期的異常類:自定義類 並繼承於java.lang.RuntimeException。(運行期的異常RuntimeException可以不用處理,直接交給JVM處理-中斷程序)

格式:

public class XXXExcepiton extends Exception(編譯異常) | RuntimeException{
    添加一個空參數的構造方法
    添加一個帶異常信息的構造方法
}

自定義異常的練習

要求:我們模擬註冊操作,如果用戶名已存在,則拋出異常並提示:親,該用戶名已經被註冊。

首先定義一個登陸異常類RegisterException:

// 業務邏輯異常
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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章