为什么要自定义异常类
在开发中总是有些异常情况是 JAVA 没有定义好的,此时我们根据自己的异常情况来定义异常类。
例如:年龄 负数 问题,登录失败 等异常
自定义异常
类型
- 自定义一个 编译时期 异常: 自定义类 并继承于
java.lang.Exception。 - 自定义一个 运行时期 异常: 自定义类 并继承于
java.lang.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 RegisterException{
for (String name : names) {
if(name.equals(uname)){//如果名字在这里面 就抛出登陆异常
throw new RegisterException("亲"+name+"已经被注册了!");
}
}
return true;
}
}