java中异常与错误的总结

java中错误与异常的总结

java中异常与错误的总结

这里是对java中错误与异常的总结。

 

Exception类是Java中的异常类,它继承了java.lang包下的Throwable类,它本身之下也有庞大的继承体系,稍后做详细说明。Error也继承了java.lang包下的Throwable类,其实二者的区别在本人理解看来就是Exception是可挽回的,而Error则是fatal的,只是程度上的区别。为什么有理由这么说呢?jdk中有一例AWTException和AWTError,这不是很奇怪吗?

 

那么Throwable里的东东怎么去用呢?第一反应可能是try{}catch(Throwable e){};或者给那个方法直接throws一个某某Throwable的实现子类;再或者看某某种情况是程序所不期待的,就throw一个异常类实例(一般由于Error是致命的,所以程序员没有“义务”,也不必拉么“无聊”去处理一个Error)。

 

这里说明一下Exception。一般异常可分为两种:运行时异常即RuntimeException(运行时异常);强制异常(就是在编译前就应该由程序员处理的异常)。

 

现列举几个常见的错误及异常:

 

上面提到的AWTError是当发生严重的 Abstract Window Toolkit 错误时,抛出此错误。这个名字看着很恐怖,我当时

第一眼没看出来,定睛一瞧才发现就是平时使用的java.awt包啊!呵呵……

 

接着看看另一个Error:ThreadDeath。jdk中描述:调用 Thread 类中带有零参数的 stop 方法时,受害线程将抛出一个

ThreadDeath 实例。 仅当应用程序在被异步终止后必须清除时才应该捕获这个类的实例。如果 ThreadDeath 被一个方法捕获,那么将它重新抛出非常重要,因为这样才能让该线程真正终止。 如果没有捕获 ThreadDeath,则*错误处理程序不会输出消息。

 

虽然 ThreadDeath 类是“正常出现”的,但它只能是 Error 的子类而不是 Exception 的子类,因为许多应用程序捕获所有出现的 Exception,然后又将其放弃。

 

虽然Thread.stop()已经是一个过时的方法,但ThreadDeath告诉我们有些东西是“正常出现”的,但却定义为Error。

 

接下来是两个比较常见的Error:OutOfMemoryError和*Error。它们都是java.lang包下VirtualMachineError的子类。前者在Java 虚拟机因内存溢出或没有可用的内存提供给垃圾回收器而无法分配一个对象时抛

出;后者是当应用程序递归太深而发生堆栈溢出时抛出。对于Exception,先说说刚才那个AWTExcption。在调用java.awt包下的某些方法时会抛出AWTExcption异常。详见

http://www.vifir.com/projectdoc/jdk16/java/awt/class-use/AWTException.html。

 

有一些异常是比较常见的,如:DataFormatException(数据格式异常)、FontFormatException(字体格式异常)。这两个异常在JFC中都是没有子类的,比较简单。还有一些Exception的字类本身还有很多自类,如IOException就有比较庞大的继承体系。

 

不过,以上提到的异常均为强制异常。Exception类有一个子类比较特别,它是RuntimeException。运行时异常有一些子类中常见的有NullPointerException(空指针异常)、EmptyStackException(栈为空异常)、IndexOutOfBoundException(数组越界异常)等等。

 

通过对错误与异常的总结,我本人不仅对Throwable类有个总括的认识,也终于发现java中继承体系之庞大。555...

1 楼 javafound 2010-04-13  
java中异常与错误的总结  比较细致,呵呵,
2 楼 optimism_best 2010-05-20  
楼主,你的样子吓到我了,阿门!
3 楼 为爱Debug 2010-05-20  
依稀记得,以前为了考试背过!呵呵