Throwable
1. Error
包括 Java 的内部错误、资源耗尽错误,应用程序不应该抛出该异常。
2. Exception
又分为 IOException 和 RuntimeException。前者包括:在文件尾部读取数据、打开格式错误的 URL、根据给定的字符串查找 Class 对象但对应的类不存在,特征是外部输入、结果不可控;后者包括:数组越界、错误的类型转换、空指针访问等等,后者都可以规避,如果出现了后者,那一定是应用程序自身的问题。
Java 将 Error 和 RuntimeException 称为未检查(unchecked) 异常:前者无须检查(因为不可控,所以是未检查),后者必须检查(如果出现了,肯定是因为未检查)。所有其它的异常称为已检查异常。
一个方法必须声明所有可能抛出的已检查异常,否则编译器会给出错误消息。
子类方法中抛出的已检查异常范围更小,不能超过父类方法中声明的异常范围。即,子类中必须消化所有的已检查异常,或者包装后再抛出。