Java异常体系

30次阅读

共计 647 个字符,预计需要花费 2 分钟才能阅读完成。

在使用 JdbcTemplate 中 queryForObject 方法的时候抛出一个异常:

org.springframework.dao.EmptyResultDataAccessException: Incorrect result size: expected 1, actual 0

queryForObject 的内部逻辑是这样的:使用 queryForObject 时,会查询一个结果,当查询中结果多余一个或者没有都会抛出一个异常IncorrectResultSizeDataAccessException。这个向外抛出的异常为什么不需要我使用 try-catch 处理或者继续向外抛出呢?下面的图片展示这个异常的继承结构。

Google 之后认识到所有 运行时异常都可以不向外抛出

Java 异常体系


首先,Throwable 标志这是一个异常。
其次,Throwable 有两个子类分别是 Error 和 Exception,Error 表示的是 JVM 发生的异常,如内存溢出,这是应用自身程序本身无法处理的异常;而 Exception 则表示应用程序自身可以处理的异常。
最后,Exception 的子类分为两类,一个是 RuntimeException,另外就是其他继承自 Exception 的异常,如 IOException。区分这两类异常主要特性是是否受检。

什么是受检异常,什么是非受检异常?受检异常指的是
非受检异常指的是因为代码的逻辑问题而导致的异常。

参考:
Java 的 Checked 和 Unchecked Exception【译】

正文完
 0