java异常分类

第一层:Throwable

第二层 Error和 Exception:

Error(错误) 操作系统级别的,或者jvm发生的错误 无法处理
Exception(异常) 我们是可以处理的

第三层:CheckedException和RuntimeException

Exception:
CheckedEception: 编译时期的异常,这只是一个分类,只是举个例子
image.png
抛出异常(test这个函数处理了异常)
异常总要被处理,记录日志是一种处理,也可以返回前端
RuntimException: 在编译期间不一定会被发现,是在运行时发现
它有一个具体类RuntimeException,继承与Exception

那我们自定义异常的时候,到底是继承RuntimeException还是继承Exception呢?

关于CheckedException和RuntimeException

RuntimeException(我们开发者无法处理的情况):

如果客户端发送请求,服务器端去数据库查找记录,它有可能找到,也有可能找不到,这个时候我们就需要抛出一个RuntimeException,这个时候运行异常比较合适。
我们输出id为1的数据无法查询到,这个时候的异常我们确实无法处理,但是这个又不能归结成bug,所以使用RuntimeException

CheckedException(真正意义上面的Bug)

我们在在A类里面调用B方法,B需要调用C的一个方法,这个时候我们就需要CheckedException。这个时候编译不过,所以CheckedException比较合适
或者说我们需要查找一个文件,文件可能没有找到,这个时候使用CheckedException也会比较合适。

如果一个异常我们可以处理的,我们就使用 CheckedException ,如果我们无能为力,就要使用RuntimeException。
比如说文件查找,找不到,我们可以修复的,可能是路径不对,可能是文件名错误,这个时候我们是有能力对这个功能进行修复的。

总结一下
如果是可能是bug,那我们就属于CheckedException,如果是我们无能为力的异常,就属于RuntimeException