1异常的作用
业务处理流程和错误处理流程分离,使代码更简洁,易懂。
便于程序员调试和排错。
异常捕获,向用户提供友好信息。
......
2异常使用要点
重新抛出的异常必须保留原来的异常,即throw new NewException("message", e); 而不能写成throw new NewException("message")。
在所有异常被捕获且没有重新抛出的地方必须写日志。
如果属于正常异常的空异常处理块必须注释说明原因,否则不允许空的catch块。
针对第一点举个例子:
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也将从检查性异常转为非检查性异常。
分享到:
相关推荐
java异常总结.pdf
总结的常见的JAVA异常。没有涵盖全部异常,但是包括了最常见的饿18中异常
当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常. java.lang.InternalError 内部错误。用于指示Java虚拟机发生了内部错误。 java.lang.LinkageError 链接错误。该错误及其所有子类指示某个类...
Java异常处理总结
java常见异常,总结java常见异常解释,很全面,解释也很周到
java异常的终极总结 包括非常全面的异常总结 你值得下载!
Java 异常处理的误区和经验总结 本资料共包含以下附件: Java 异常处理的误区和经验总结.pdf
Java常见异常总结,不用在害怕自己没见过的异常了
Java基础编程异常总结
java 异常种类总结【转】.docx java 异常种类总结【转】.docx java 异常种类总结【转】.docx
个人关于java异常处理的思维导图总结。0积分下载。如果认为有帮助,请关注点赞,日后还有更多免费资源。敬请关注。
Java异常处理总结.pdf
摘要使用Java异常的人很多,但能合理使用的却不多,Java异常处理设计是一个冷门的话题,但好的异常设计会让程序有质的变化,所以本文从各个方面分析便总结了,在J