您的位置:首页 > 编程语言 > Java开发

Java 异常类层次结构及怎样设计一个高效合理的异常处理框架

2014-09-21 19:29 218 查看
在Java中,异常分为受检查的异常,与运行时异常. 两者都在异常类层次结构中.

下面的图展示了Java异常类的继承关系.



图1

粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被捕捉处理,命名为 CHecked Exception 是因为Java编译器要进行检查,Java虚拟机也要进行检查,以确保这个规则得到遵守.

绿色的异常是运行时异常(runtime exceptions),需要程序员自己分析代码决定是否捕获和处理,比如 空指针,被0除...

而声明为Error的,则属于严重错误,需要根据业务信息进行特殊处理,Error不需要捕捉。

想要了解更多,请参考: Top
10 Questions about Java Exceptions

相关文章:

Top
10 Questions about Java Exceptions
Java
Exception Handling Example
java
io class hierarchy diagram
Operating
System Concepts Hierarchy Diagram

参考文献:/article/2584888.html

设计一个高效合理的异常处理框架

对于一个应用系统来说,发生所有异常在用户看来都是应用系统内部的异常。因此应该设计一套应用系统的异常框架,以处理系统运行过程中的所有异常。

基于这种观点,可以设计一个应用系统的异常比如叫做AppException。并且对用户来说,这些异常都是运行应用系统运行时发生的,因此AppException应该继承RuntimeException,这样系统中所有的其他异常都转译为AppException,当异常发生的时候,前端接收到AppExcetpion并做统一的处理。画出异常处理框架如图 3 :



图 3 一个应用系统的异常处理框架

在这个设计图中,AppRuntimeException是系统异常的基类,对外只抛出这个异常,这个异常可以由前端(客户端)接收处理,当异常发生时,客户端的相关组件捕获并处理这些异常,将"友好"的信息展示给客户。

在AppRuntimeException下层,有各种各样的异常和错误,最终都转译为AppRuntimeException,AppRuntimeException下面还可以设计一些别的子类异常,比如AppDAOException、OtherException等,这些都根据实际需要灵活处理。在往下就是如何将捕获的原始异常比如SQLException、HibernateException转换为更高级一点AppDAOException。

有关异常框架设计这方面公认比较好的就是Spring,Spring中的所有异常都可以用org.springframework.core.NestedRuntimeException来表示,并且该基类继承的是RuntimeException。Spring框架很庞大,因此设计了很多NestedRuntimeException的子类,还有异常转换的工具,这些都是非常优秀的设计思想。

六、 Java异常处理总结

回顾全文,总结一下Java异常处理的要点:

1、 异常是程序运行过程过程出现的错误,在Java中用类来描述,用对象来表示具体的异常。Java将其区分为Error与Exception,Error是程序无力处理的错误,Exception是程序可以处理的错误。异常处理是为了程序的健壮性。

2、 Java异常类来自于Java API定义和用户扩展。通过继承Java API异常类可以实现异常的转译。

3、 异常能处理就处理,不能处理就抛出,最终没有处理的异常JVM会进行处理。

4、 异常可以传播,也可以相互转译,但应该根据需要选择合理的异常转译的方向。

5、 对于一个应用系统,设计一套良好的异常处理体系很重要。这一点在系统设计的时候就应该考虑到。
参考文献:/article/8004676.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: