Java基础进阶笔记 - Day05 - 第三章 自定义异常
Java基础进阶笔记 - Day05 - 第三章 自定义异常
系统:Win10
JDK:1.8.0_121
IDE:IntelliJ IDEA 2017.3.7
3.1 概述
为什么需要自定义异常类:
我们说了Java中不同的异常类,分别表示着某一种具体的异常情况,那么在开发中总是有些异常是SUN没有定义好的,此时我们根据自己业务的异常情况来定义异常类。例如年龄负数问题,考试成绩负数问题等等,那么我们能不能自己定义异常呢?
什么是自定义异常类:
在开发中根据自己业务的异常情况来定义异常类。如自定义一个业务逻辑异常:RegisterException - 注册异常类
异常类如何定义:
- 自定义一个编译期异常:自定义类并继承java.lang.Exception
- 自定义一个运行期异常类:自定义一个类并继承于java.lang.RuntimeException
3.2 自定义异常的练习
要求:模拟注册操作,如果用户名已存在,则抛出异常并提示:该用户名已经被注册
首先顶一个登录异常类:RegisterException
// 业务逻辑异常
public class RegisterException extends Exception {
// 空参构造
public RegisterException() {
super();
}
/**
* @param message 表示异常提示信息
*/
public RegisterException(String message) {
super(message);
}
}
模拟注册操作,使用List集合模拟数据库中存储的数据,并提供当前注册账号是否存在用于判断
public class RegisterDemo {
private static List<String> list = getAccount();
public static void main(String[] args) {
String name = "麻子";
// 调用方法
try {
// 可能出现异常的代码
checkUsername(name);
// 如果没有异常就是注册成功,将账号进行添加
list.add(name);
System.out.println(name + " 注册成功!");
} catch (RegisterException e) {
e.printStackTrace();
}
}
// 模拟数据库中已经存在的账号
private static List<String> getAccount() {
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王二");
list.add("麻子");
return list;
}
// 判断当前注册账号是否存在
// 因为是编译期异常,所以抛出该异常需要声明抛出
public static boolean checkUsername(String name) throws RegisterException {
for (String s : list) {
// 如果名字已经在里面,就抛出注册异常
if (name.equals(s)) {
throw new RegisterException(name + "账号已经被注册了!");
}
}
return true;
}
}
运行结果: