浏览 2745 次
锁定老帖子 主题:java异常总结
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-07
最后修改:2011-07-07
2异常使用要点
针对第一点举个例子: class NewException extends Exception { } public class ExceptionTest { public void test() { try { throw new NewException(); } catch (NewException e) { //throw new RuntimeException("检测异常转为非检测异常。", e); throw new RuntimeException("检测异常转为非检测异常。"); } } public static void main(String[] args) { ExceptionTest et = new ExceptionTest(); et.test(); } } /* throw new RuntimeException("检测异常转为非检测异常。", e)结果: Exception in thread "main" java.lang.RuntimeException: 检测异常转为非检测异常。 at cn.yang.ExceptionTest.test(ExceptionTest.java:12) at cn.yang.ExceptionTest.main(ExceptionTest.java:18) Caused by: cn.yang.NewException at cn.yang.ExceptionTest.test(ExceptionTest.java:10) ... 1 more */ /* throw new RuntimeException("检测异常转为非检测异常。")结果: Exception in thread "main" java.lang.RuntimeException: 检测异常转为非检测异常。 at cn.yang.ExceptionTest.test(ExceptionTest.java:12) at cn.yang.ExceptionTest.main(ExceptionTest.java:18) */ 3三层结构 在action、service和dao三层结构中处理异常,一般是dao层抛出HibernateException(不用捕获,为runtimeException),在service层抛出自定义的业务异常ServiceException,最后在action中统一捕获自定义的业务异常ServiceException通知用户(可以为所有的action定义一个拦截器ExceptionInterceptor捕获这个自定义的业务异常,这样就不必每个action里都写try catch)。 需要注意的是在service中抛出业务异常最好继承RuntimeException。因为事务一般放在service层,如果抛出的是checked异常,事务不会回滚(可以配置),这是spring的特性。spring抛出的是unchecked异常,Hibernate3也从检查性异常转为非检查性异常(HibernateException),因此service层调用dao层抛出HibernateException异常时,service层定义的事务将会回滚。 查资料时看见有前辈总结的spring的异常设计,摘抄如下: 一个统一的异常层次结构对于提供服务抽象是必需的。 最重要的就是org.springframework.dao.DataAccessException以及其子类了。 需要强调的是Spring的异常机制重点在于应用编程模型。与SqlException和其他数据存取API不同的是: Spring的异常机制是为了让开发者使用最少, 最清晰的代码。DataAccessException和其他底层异常都是非检查性异常(unchecked exception)。 spring的原则之一就是基层异常就应该是非检查性异常. 原因如下: 1. 基层异常通常来说是不可恢复的。 2. 检查性异常将会降低异常层次结构的价值.如果底层异常是检查性的, 那么就需要在所有地方添加catch语句进行捕获。 3.try/catch代码块冗长混乱, 而且不增加多少价值。 使用检查异常理论上很好, 但是实际上好象并不如此。 Hibernate3也将从检查性异常转为非检查性异常。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-07-11
理了一理,学习了。
|
|
返回顶楼 | |