为什么有的异常不用捕获

继承自RuntimeException的都不用捕获或者再次抛出,例如 NullPointerException  IllegalArgumentException

Error也不用,不过Error不建议程序中捕获,因为抛出Error一般都是些严重的错误。

 

《Spring in Action》说到 DataAccessException ,这个异常是spring DAO层异常的父类。也是继承的RuntimeException

ibaits的SqlMapExecutor会抛出SQLException,你拿到了SQLException后还要catch或是往上throw,

Hibernate 抛的HibernateException 则让你的应用代码跟hibernate耦合了。

spring说:异常检测会使你的代码到处是不相关的catch或thorws语句,使代码杂乱无章,并且这些异常往往是不可恢复的(例如无法连接数据库.无效的字段名等等),所以并不强制你去处理它们。

 

 

SqlMapClientTempalte这个类在execute的时候会调用ibatis的SqlMapExecutor去执行数据库操作,有可能抛出SQLException

 

catch (SQLException ex) {
    throw getExceptionTranslator().translate("SqlMapClient operation", null, ex);
   }

spring捕获SQLException 并根据情况抛出继承DataAccessException 的异常,例如:BadSqlGrammarException等。。

你的应用可以选择捕不捕获,或捕获相应的异常去做相应的处理

 

 

这篇文章也对异常机制做了很好的讨论 http://www.iteye.com/topic/72170

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值