异常体系结构

Java 的异常体系如下图所示,所有的异常都继承自 Throwable 接口。
Exception-system-structure.svg
Java 语言规范规定Error 类及其子类和 RuntimeException 类及其子类被称为 Unchecked Exception;其它所有继承自 Throwable 接口的子类(包括 Exception 类自身)则称为 Checked Exception

Checked Exception 需要在代码中显式处理,否则会编译出错。

一些常见异常

在面试时,面试官可能会让你说出一些常见的异常,这里列出了一些经典异常。

Checked Exception Unchecked Exception
Error RuntimeException
SQLException
ClassNotFoundException
NoClassDefFoundError
OutOfMemoryError
NullPointerException
ClassCastException

一道入门面试题是: NoClassDefFoundErrorClassNotFoundException 有什么不同 ?

  • ClassNotFoundException 表示在运行时找不到指定的类,如调用 Class.forName() 方法时,如果找不到目标类,则抛出该异常。
  • NoClassDefFoundError 表示未找到目标类的定义,如在编译成功后,故意删除一个类的 class 文件,在执行程序时,就会抛出该错误。