Error vs Exception

一, 类的结构

1, 图式

clip_image002

2, 参考链接

http://dlc.sun.com.edgesuite.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/latest/html/zh_CN/api/java/lang/Throwable.html

 

二, 深刻理解Throwable

1, Throwable是Java语言中所有错误或异常的超类

2, 只有当对象是此类的实例或者子类的实例时,才可被抛出

3, Catch参数中的类型必须是此类或者此类的子类

4, Throwable 包含了其线程创建时线程执行堆栈的快照。它还包含了给出有关错误更多信息的消息字符串。最后,它还可以包含 cause(原因):另一个导致此 throwable 抛出的 throwable。最后一个称之为“异常链”。

5, Cause可以是Throwable,并且可以包装为不同的Throwable

6, 参考链接:

http://dlc.sun.com.edgesuite.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/latest/html/zh_CN/api/java/lang/Throwable.html

 

三, Error和Exception有什么不同?

1, 简单来说,Error是程序中不正常的状况,程序不可接受。异常是应用中因为可理解的不确定情况导致的可能状况,例如服务器not available。

2, 异常中有一种特殊的RuntimeException,一般情况下,当我们声明方法的时候,需要throw 可能出现的Exception,但是RuntimeException子类相关的Exception不需要声明抛出。因为RuntimeException子类出现的状况,例如NullPointException是不正常,基本上都是程序的逻辑问题。

3, 根据文档,都是可以catch的。

4, 参考链接:

http://dlc.sun.com.edgesuite.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/latest/html/zh_CN/api/java/lang/Error.html

http://dlc.sun.com.edgesuite.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/latest/html/zh_CN/api/java/lang/Exception.html

http://dlc.sun.com.edgesuite.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/latest/html/zh_CN/api/java/lang/RuntimeException.html

 

四, 总结

1, 可处理和应不应当处理,还是不一样的。

2, 不同Exception的定义,保证了我们能够focus真正有意义的异常状况。