Java中的异常处理

Java中的异常处理经常被程序员忽略,请大家参考 http://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html。该文章通过反模式的方式列出大家常犯的一些错误。
其实针对错误处理有一些最佳实践可供参考: http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html。还有一些模式供参考: http://c2.com/cgi/wiki?ExceptionPatterns
我结合个人的理解和实践概括总结几点,希望和大家分享讨论。
1、在抛出异常和处理异常时要弄清楚:异常原因(可分为程序异常、客户端造成的异常和资源异常);异常的可处理还是不可处理;异常应该谁来处理。
2、程序异常纯粹属于程序bug,不应该谈处理问题,应该在测试阶段就解决。其处理往往交给运行环境。如果不是框架级别的程序,这类异常不在我们关注的范围内。
3、客户端造成的异常是我们最常考虑和设计的。但客户端的定义本身是一个很难的事情,你调我我调你,来回折腾几下,问题可多多,在这个过程中如果我们考虑如下几点可能问题会简单:
a.组件级别的应用应该有独立的问题描述异常定义,组件访问的任何其它组件的异常应该被包装成自身异常。例如Hibernate定义了自己的异常结构,其封装了jdbc等异常。
b.尽量使用Java规范异常。
对异常的命名要能代表异常的问题所在,一些通用的问题描述异常请直接使用java规范异常。
c.不要在由于访问自己的客户端因素造成的异常中写日志和进行其它处理,直接抛出,抛出的异常应该经过包装或者是Java规范异常。
有时我们发现自己程序日志里面出现多条重复异常信息;有时我们发现经常会出现异常究竟交给谁处理的等问题,如果坚持以上原则,问题就会简单。
d.考虑异常日志的时候应该考虑日志的用途和使用者角色,例如组件的日志主要是针对组件提供商,主要日志组件的程序性异常,资源异常等,从而发现问题和解决问题。
e.对不可处理和挽救的异常建议一层一层往上抛,直到框架级别,最终到虚拟机级别(万不得已啊)。但别忘了a和b。


你可能感兴趣的:(java,设计模式,Hibernate,框架,虚拟机)