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