RSS
热门关键字:  java  Ajax  JSP  JSF  Struts
当前位置 : 首页>Java>列表

Exception 的体系分类

来源: 作者: 时间:2007-08-18 点击:

任何的异常都是Throwable类(为何不是接口??),并且在它之下包含两个字类Error / Exception,而Error仅在当在Java虚拟机中发生动态连接失败或其它的定位失败的时候,Java虚拟机抛出一个Error对象。典型的简易程序不捕获或抛出Errors对象,你可能永远不会遇到需要实例化Error的应用,那就让我们关心一下Exception

Exception中比较重要的就是RuntimeException-运行时异常(当然这个名字是存在争议的,因为任何的异常都只会发生在运行时),为什么说这个类时很重要的呢?因为它直接关系到你的异常框架的设计,仔细看RuntimeException

A method is not required to declare in its throws clause any subclasses of RuntimeException that might be thrown during the execution of the method but not caught.

-可能在执行方法期间抛出但未被捕获的 RuntimeException 的任何子类都无需在 throws 子句中进行声明。 

也就是说你的应用应该不去“关心”(说不关心是不负责任的,但只是你不应该试图实例化它的字类)RuntimeException,就如同你不应该关心Error的产生与处理一样!RuntimeException描述的是程序的错误引起来的,因该由程序负担这个责任!(从责任这个角度看Error属于JVM需要负担的责任;RuntimeException是程序应该负担的责任;checked exception 是具体应用负担的责任

那就有人会问,那我该关心什么!答案就是除了Error与RuntimeException,其他剩下的异常都是你需要关心的,而这些异常类统称为Checked Exception,至于Error与RuntimeException则被统称为Unchecked Exception.

 

JDKAPI中我们可以看到,Java把异常分为了ErrorException两大类,在Exception中又分为checked exceptionruntime exception。从系统开发的角度上,我们可以把exception分为: 

 

·         JVM异常。这种异常我们不应该捕捉,因为它的出现意味着一些比较严重的错误,比如OutOfMemoryErrorStackOverflowError等;

·         系统异常。大多数情况下,系统异常以RuntimeException的形式出现,比如NullPointerException, ArrayOutOfBoundsException等,这时往往意味着我们的程序里面出现了Bug;还有一种情况,例如我们没有办法通过JNDI找到某个资源,也应该属于系统异常。系统异常的主要特点是,当我们遇到这种异常的时候,我们没有合适的办法处理,或者说我们不能已一个合理的方式告诉最终用户系统出现了什么错误。很难想象用户看到一个NPE,并在界面上看到一堆stack trace是什么感觉。这种异常应该在单元测试以及集成测试的时候被检测到,在发布的时候应该尽可能不出现这样的问题;

·         应用异常。这种异常是由我们的系统。这些异常的出现对用户来说,可能是因为某个验证没有通过,某个操作的步骤出现错误等,比如插入数据库的时候出现主键重复的情况等。总之,这些异常的信息可以通过一个用户看的懂的方式显示给用户。

最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册
Google Adsense
相关文章