自定義異常

3.1 概述

爲什麼需要自定義異常類:
我們說了Java中不同的異常類,分別表示着某一種具體的異常情況,那麼在開發中總是有些異常情況是SUN沒有定義好的,此時我們根據自己業務的異常情況來定義異常類。例如年齡負數問題,考試成績負數問題等等。
在上述代碼中,發現這些異常都是JDK內部定義好的,但是實際開發中也會出現很多異常,這些異常很可能在JDK中沒有定義過,例如年齡負數問題,考試成績負數問題.那麼能不能自己定義異常呢?
什麼是自定義異常類:
在開發中根據自己業務的異常情況來定義異常類.
自定義一個業務邏輯異常: RegisterException。一個註冊異常類。
異常類如何定義:

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

3.2 自定義異常的練習

要求:我們模擬註冊操作,如果用戶名已存在,則拋出異常並提示:親,該用戶名已經被註冊。
首先定義一個登陸異常類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;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章