自定义异常
背景
这篇博客主要是承接上一篇博客《自定义注解》,写这篇博客的主要原因也跟之前差不多。因为Java的异常体系,也是我们实际开发中经常使用,但是却很少自定义的工具。所以为了能够更加深入的理解Java的异常体系,我们在这里也去自定义一下异常,还是那句话嘛:实践才是检验真理的唯一标准。
Java异常体系介绍
Java异常体系结构图
Java异常体系介绍
通过上面的异常体系结构图我们可以看到,Java的异常可以分为量大类:Error和Exception,他们二者都继承自Throwable。其中Error表示严重的错误,一般无法在程序中控制处理;Exception为可以捕获的异常,我们可以在编程过程中通过try cath捕获处理。
- Error样例
- OutOfMemoryError:内存溢出
- NoClassDefFoundError:无法加载类
- StackOverflowError:栈溢出
- Exception
-
NumberFormatException:数值类型转换异常
-
FileNotFoundException:文件找不到
-
SocketException:socket网络连接异常
其中Exception又可以分为RuntimeException和非RuntimeException类型。
对于非RuntimeException类型的Exception,都必须要进行异常捕获和处理。
自定义异常步骤
- 新建一个异常类MyBaseException,继承自RuntimeException,该类作为我们自定义异常类的基类,供其他自定义异常类使用。
/**
* @ClassName MyBaseException
* @Description 自定义类的基类
* @Author wuyuqing
* @Date 2020/8/10 22:35
* @Version 1.0
*/
public class MyBaseException extends RuntimeException {
public MyBaseException() {
super();
}
public MyBaseException(String message, Throwable cause) {
super(message, cause);
}
public MyBaseException(String message) {
super(message);
}
public MyBaseException(Throwable cause) {
super(cause);
}
}
- 自定义UserNotFoundException继承MyBaseException,当执行相关业务逻辑时,查询不到相关用户,便可以抛出该异常。
/**
* @ClassName UserNotFoundException
* @Description 单查询不到用户时抛出该异常
* @Author wuyuqing
* @Date 2020/8/10 22:43
* @Version 1.0
*/
public class UserNotFoundException extends MyBaseException {
public UserNotFoundException() {
super();
}
public UserNotFoundException(String message, Throwable cause) {
super(message, cause);
}
public UserNotFoundException(String message) {
super(message);
}
public UserNotFoundException(Throwable cause) {
super(cause);
}
}
- 使用自定义异常
public static void main(String[] args) {
System.out.println("为查询到用户");
throw new UserNotFoundException();
}
上面的代码比较简单,也许我们感觉不到自定义异常的好处,在实际编程中我们确实也很少自定义异常,通常情况我们都是使用JDK自带的异常体系。而且上面的案例,我们通过Java原生的异常体系也可以实现异常的抛出,定位到问题所在。
但是我们既然自定义异常了,自定义异常肯定也是有他的好处。我能想到的好处就是:能够使异常更加明了,便于问题定位。
所以今天分享自定义异常,主要是跟大家一起回顾学习Java的异常体系和自定义异常的步骤,差不多拜拜,回见!