《Java核心技术》复习笔记 - 第十一章 异常
Java中的异常层次结构如下:
Error类层次结构描述了java运行时系统内部错误和资源耗尽错误。应用程序不应该抛出这样类型的错误。如果出现了这样的内部错误,除了通告给用户,并尽力使程序安全的终止之外,再也无能为力了。这种情况很少出现。
设计程序时,主要关注Exception层次结构。由程序错误导致的异常属于RuntimeException,而程序本身没有问题,但由于像I/O错误这类问题导致的异常属于其他异常。
派生于RuntimeException的异常包含如下几种情况:
- 错误的类型转换
- 数组访问越界
- 访问空指针
不是派生于RuntimeException的异常包括
- 试图在文件尾部读取数据
- 试图打开一个错误格式的URL
- 试图根据给定的字符串查找Class对象,而这个字符串表示的类不存在。
一般来说,程序如果出现RuntimeException异常,那么肯定是你的问题了。
Java语言规范将派生于Error类或RuntimeException类的所有异常称为未检查(unchecked)异常,所有其他的异常称为已检查(checked)的异常。一个方法必须声明所有可能抛出的已检查异常,而未检查异常要么不可控制(Error),要么就应该避免发生(RuntimeException)。如果方法没有声明所有可能发生的已检查异常,编译器会给出一个错误信息。
如果子类覆盖了超类的一个方法,子类方法中声明的已检查异常不能超过超类方法中声明的异常范围,也就是说,子类方法中抛出的异常范围更小,或者根本不抛出异常。如果超类没有抛出任何已检查异常,子类也不能抛出任何已检查异常。