Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15513
  • 博文数量: 9
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-25 10:41
文章分类

全部博文(9)

文章存档

2014年(1)

2013年(8)

我的朋友

分类: Java

2013-12-30 13:11:29


图片稍后补上

Throwable
首先需要说的是:Throwable是一个类,不是接口,通常我们用形容词定义接口,比如Runnable,但Throwable是类
Throwable是Java程序中错误/异常处理的父类,Error和Exception都是Throwable的子类
  1. public class Throwable implements Serializable

Error和Exception
Error
表示不是由程序错误引起的无法预期的错误,如JVM耗尽内存,这是属于JVM 层次的严重错误并导致JVM无法继续执行,不是不能从Error恢复,但是很困难,所以不指望程序员处理Error
Exception表示需要捕捉或者需要程序处理的错误,例如因为某个资源不可用,或者正确执行所需的其他某个条件不满足所造成的,是一种设计或者实现问题,表示如果程序正常运行从不会发生的情况

Error跟Exception抛出的方式大体相同的,
只有一点不同。就是一个抛出error的方法不需要对此进行声明
(有些地方说Error是一个un-checked exception,所以才不需要在方法上声明,我觉得不是,从技术角度上说,Error不是Exception,因为它不继承自Exception,见上图)

checked exception(检查时异常)与un-checked exception
(非检查时异常)
1. 从分类看
checked exception(检查时异常):都是exception的子类
un-checked exception(非检查时异常):都是runtime exception(运行时异常)的子类

2. 从内容看
checked exception(检查时异常):Java编译器要求方法必须声明checked exception,IO异常和SQL异常都属于这类异常。程序员必需对所有可能出现的这类异常进行catch
un-checked exception(非检查时异常):Java编译器不要求必须声明抛出未被捕获的运行时异常(因为是运行时才产生的异常,定义方法的时候当然不可能提前知道,也就不可能声明),当出现这样的异常时总是由JVM接管。比如:我们很少去处理过NullPointerException异常

3. 常见的un-checked exception(非检查时异常)
NullPointerException,ClassCastException和IndexOutOfBoundsException

对于un-checked exception(非检查时异常)的处理
un-checked exception(非检查时异常)是Exception的子类,所以也有一般异常的特点(可以被Catch块处理的),只不过往往我们不对他处理罢了,也就是说:
a. 如果不对un-checked exception(非检查时异常)进行处理,那么异常出现后,要么是线程中止,要么是主程序终止
b. 否则,则必须捕捉所有的运行时异常,决不让这个处理线程退出

总结
Error和Exception都继承自Throwable父类
Exception
1.分成检查时异常(checked)或非检查时异常(unchecked)
2.表示一个由程序自身导致的错误
3.应该在应用程序级被处理

Error
1.表现形式和非检查时异常(unchecked)相同,例:不需要在方法上声明
2.经常用来用于表示系统错误或低层资源的错误
3.如何可能的话,应该在系统级被捕捉

阅读(345) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~