异常体系结构
Java 的异常体系如下图所示,所有的异常都继承自 Throwable
接口。
Java 语言规范规定:Error
类及其子类和 RuntimeException
类及其子类被称为 Unchecked Exception;其它所有继承自 Throwable
接口的子类(包括 Exception
类自身)则称为 Checked Exception。
Checked Exception 需要在代码中显式处理,否则会编译出错。
一些常见异常
在面试时,面试官可能会让你说出一些常见的异常,这里列出了一些经典异常。
Checked Exception | Unchecked Exception | |
---|---|---|
Error | RuntimeException | |
SQLException ClassNotFoundException |
NoClassDefFoundError OutOfMemoryError |
NullPointerException ClassCastException |
一道入门面试题是: NoClassDefFoundError
和 ClassNotFoundException
有什么不同 ?
ClassNotFoundException
表示在运行时找不到指定的类,如调用Class.forName()
方法时,如果找不到目标类,则抛出该异常。NoClassDefFoundError
表示未找到目标类的定义,如在编译成功后,故意删除一个类的 class 文件,在执行程序时,就会抛出该错误。