一、自定义异常概述
1、为什么需要自定义异常
我们学习了异常体系,了解到了Java中有很多种异常类,每个异常类分别表示着某一种具体的
异常情况,但是在实际开发中总存在一些SUN公司没有定义好的异常情况,所以我们需要根据自己
业务的异常情况来定义具体的异常类。例如年龄负数问题,考试成绩负数问题等等,那么这些问题
我们能不能自己定义异常呢?
2、自定义异常如何定义
分析业务,如果你的业务需要的是一个一旦出现就停止程序的异常,那么你就需要一个运行
时异常,如果你的业务需要的是记录某个异常信息,或者是用来提示的话,那么你需要的是一个检
查时异常:
➢自定义一个编译期异常:自定义类并继承于java.lang.Exception。
➢自定义一个运行时期的异常类:自定义类并继承于java.lang.RuntimeException。
然后重写无参和有参构造函数!
二、检查时异常demo
模拟用户注册出现用户名重复的异常错误
public class UserCheckedExceptionDemo {
//模拟数据库中已经存在的三个用户名
private static String [] names = {"bill","hill","jill"};
public static void main(String[] args) {
//需要进行用户的注册,注册之前,先调用检查用户名是否存在的方法
String username = "bill";
try {
checkUsername(username);
System.out.println("注册成功!");
} catch (RegisterException e) {
//具体的错误信息!
e.printStackTrace();
}
System.out.println("程序继续往后面执行!");
}
private static boolean checkUsername(String username) throws RegisterException {
for(String name:names) {
if(username.equals(name)) {
throw new RegisterException("该用户名已经存在!");
}
}
return true;
}
}
class RegisterException extends Exception{
public RegisterException() {
}
public RegisterException(String message) {
super(message);
}
}
三、运行时异常 demo
自定义异常的使用,此处模拟的是出现一个RuntimeException的自定义异常
public class UserRuntimeExceptionDemo {
public static void main(String[] args) {
operation("核心处理器");
System.out.println("继续下一步的操作!");//这一步不会执行
}
private static void operation(String operationPlace) {
if("核心处理器".equals(operationPlace)) {
throw new IllegalOperationException("触碰到了安全机制,系统马上自动关闭!");
}
System.out.println("操作成功!");
}
}
//定义一个非法操作异常,假设用户一旦触发了某个非常关键的操作的话,那么系统会自动关闭
class IllegalOperationException extends RuntimeException{
public IllegalOperationException() {
}
public IllegalOperationException(String message) {
super(message);
}
}