Java基礎 第三節 第二十課

我是小白呀發表於2020-12-05

概述

為什麼需要自定義異常類

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

什麼是自定義異常類

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

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

異常類如何定義

  1. 自定義一個編譯期異常: 自定義類並繼承於java.lang.Exception
  2. 自定義一個執行時期的異常類: 自定義類並繼承於java.lang.RuntimeException

自定義異常的練習

要求: 我們模擬註冊操作, 如果使用者名稱已存在, 則丟擲異常並提示: 親, 該使用者名稱已經註冊.

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

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

    /**
     * 構造
     * @param message 表示異常提示
     */
    public RegisterException(String message) {
        super(message);
    }
}

模擬登陸操作, 使用陣列模擬資料庫中儲存的資料, 並提供當前註冊賬號存在方法用於判斷.

public class Test46 {
    // 模擬資料庫中已存在賬號
    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 RegisterException{
        for (String name : names) {
            if(name.equals(uname)){  // 如果名字在這裡面 就丟擲登陸異常
                throw new RegisterException("親" + name + "已經被註冊了!");
            }
        }
        return true;
    }
}

相關文章