下图表示 Java 内置的异常类之间的继承关系:
- 顶层类 Throwable 派生出两个重要的子类, Error 和 Exception
- 其中 Error 指的是 Java 运行时内部错误和资源耗尽错误.
- Exception 是我们设计程序所接触的异常类的父类.而IOException 则是其他一些异常.这两个类的划分原理主要是:RuntimeException 中主要是程序错误所导致的异常;IOException 中则是程序本身没有错误,是因为例如 I/O 错误这类问题产生的异常.
- 其中 Exception 有一个子类称为 RuntimeException , 这里面又派生出很多我们常见的异常类 NullPointerException , IndexOutOfBoundsException 等.
- Java语言规范将派生于 Error 类或 RuntimeException 类的所有异常称为非受查异常(非受检查异常), 所有的其他异常称为受查异常(受检查异常).
受查异常和非受查异常的区别:
- 简单来说,受查异常是必须要进行捕获的异常,如果程序员没有进行显式处理,那么程序就不能通过编译。
- 非受查异常则可以省去该步骤,JVM会在运行时抛出异常。