我很难理解如何处理未检查的异常。
如果方法没有声明异常,而且我也不需要处理它,那我怎么知道这个方法会抛出异常呢?
据我所知,未检查的异常是由编程错误引起的,所以为了避免NullPointerException
,我会引入一个空值检查。或者对于ArrayIndexOutOfBoundsException
,我会检查如何访问数组。
但当我不知道一个方法会抛出自定义的未检查异常时,我该怎么处理呢?
那么如何将异常从数据层传播到用户界面呢?这些必须是已检查的异常,对吗?
我会让数据层抛出已检查的DataLayerExceptions
,然后在主持人类中使用try-catch块(如果我正在使用MVP),然后在catch块中在视图上设置错误消息...
或者可以使用未检查的异常来完成吗?
编辑
感谢迄今为止的回复。
以下是我面临的具体例子。
我正在开始使用Spring,在一本书中看到了一个UserRepository
类,它使用JDBCTemplate
从数据库中检索数据。 UserRepositoty
包含一个类似于此的方法:
@Override
public List<User> findAll() {
String sql = "select id, username, email, password from p_user";
return new ArrayList<>(jdbcTemplate.query(sql, rowMapper));
}
现在,jdbcTemplate的查询方法会抛出一个运行时异常DataAccessException。我通过查看方法签名得知这一点。
那么,我该如何处理这个异常呢?肯定需要给用户一些反馈信息,告诉他们发生了什么错误。同时,我也要记录下这个异常。
但是,我应该在哪里捕获这个异常呢?
是应该立即捕获并重新抛出自己的未检查异常吗? 还是应该在findAll方法上声明throws DataAccessException,并在调用类(可能是某种服务或Presenter)中处理异常呢?
又或者,我应该确保永远不会发生抛出异常的情况(如果这些条件可以由我控制的话)?