Java中的异常类,包括内置的异常类以及自定义的异常类,都直接或者间接地继承自java.lang.Throwable类。
1. 两个主要分支:
在java.lang包中,我们可以看到Throwable类有两个直接子类:Error类和Exception类,如图所示:
Error类及其子类描述了java运行时系统的内部错误和资源耗尽错误。出现这样的错误的,除了通知用户,并接尽力使程序安全地终止之外,没有更好的办法。
Exception类的层次结构又分为两个分支:一个分支由RuntimeException派生,另外一个分支包含除RuntimeException类之外的异常类。
所有的Checked Exception 均从java.lang.Exception 继承而来,而Runtime Exception 则继承java.lang.RuntimeException 或java.lang.Error (实际上java.lang.RuntimeException 的上一层也是java.lang.Exception)。
异常举例:
-
RuntimeException:
BufferOverflowException, IndexOutOfBoundsException, NullPointerException
ConcurrentModificationException ...
-
other Exception: ClassNotFoundException, IOException, S QLException
2. unchecked exception和checked exception
unchecked exception:派生至Error类和RuntimeException类的所有异常类(图中红色所示)。
checked exception:除未检查的异常类之外的异常类 (图中黄色所示) 。
Java的编译器检查代码中所有的checked exception的都需要被提供异常处理程序,如果没有的话,将报错;
代码中不需要显示的声明未检查的异常,因为这些异常要么Error,代表java运行时系统的内部错误;要么是RuntimeException,这种错误是由程序员引起的错误,完全可以修正代码解决。