1、Java中的异常层次结构简化示意图:
说明:上图只是简化图,并不表示Exception只有两个子类IOException和RuntimeException
2、Java语言规范将派生于RuntimeException类或Error类的所有异常称为“未检查(unchecked)”异常,其它检查称为“已检查(checked)异常”
- Error:描述了Java运行时系统的内部错误和资源耗尽错误,应用程序不应该抛出这种类型的对象。
- RuntimeException : 由于你的程序错误(例如错误的类型转换、数组越界访问)等引起的异常
- 不属于RuntimeException的异常:曾经能够正确运行而由于某些情况(例如,I/O错误)而导致的异常
3、
If it is a RuntimeException, it was your fault.
4、一个方法必须声明所有可能抛出的checked 异常,而unchecked异常要么不可控制(Error),要么就应该避免它们的发生(RuntiomException)。如果方法没有声明所有可能发生的checked异常,编译器就会给出一个错误信息。除了声明异常之外也可以捕获异常。这样会使异常不被抛到方法之外,也不需要throws规范。
5、如果在子类中覆盖了超类的一个方法,那么,子类方法中声明的checked异常不能超过超类方法中声明的异常范围,。特别是,如果超类方法没有抛出任何checked异常,那么子类方法也不能抛出任何checked异常。
6、如果类中的某个方法声明要抛出的异常是某个类的实例,那么,它既可以抛出一个该类的异常,也可以抛出该类的任意一个子类的异常。
7、try语句可以只有finally字句而没有catch字句。当抛出的异常必须要有另一个catch语句捕获。