自定义异常

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