所有的异常都继承Throwable。但在下一层分为两个分支: Error和Exception。
Error类层次结构描述了Java运行时系统的内部错误和资源耗尽。
Exceptionxio又分为RuntimeException和IOException。RuntimeException由系统错误导致。而程序本身没有问题,但由于像I/O错误这类问题导致的异常属于IOException。
派生于RunTimeException的异常包含以下几种情况:
1)错误的类型转换
2)数组访问过界
3)访问null指针
派生于IOException的异常包括:
1)试图打开一个不存在的文件
2)试图在文件尾部读取数据
3)试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在
Java语言规范将派生于Error类或RuntimeException类的所有异常称为非受查异常,所有IOException称为受查异常。
一个方法必须声明所有可能抛出的受查异常,而非受查异常要么不可控制(error),要么就应该避免发生(RunTimeException)。