异常的重要继承关系如图所示,其中
- Throwable 是其它异常类型的顶层父类
- Error 表示无法恢复的错误,例如 OutOfMemoryError 内存溢出、StackOverflowError 栈溢出等
- 这类异常即使捕捉住,通常也无法让程序恢复正常运行
- Exception 表示可恢复的错误,处理方式有两种
- 一是自己处理,用 catch 语句捕捉后,可以进行一些补救(如记录日志、恢复初始状态等)
- 二是用 throw 语句将异常继续抛给上一层调用者,由调用者去处理
- Exception 有特殊的子类异常 RuntimeException,它与 Exception 的不同之处在于
- Exception 被称之为检查异常,意思是必须在语法层面对异常进行处理,要么 try-catch,要么 throws
- RuntimeException 和它的子类被称为非检查异常(也可以翻译为字面意思:运行时异常),在语法层面对这类异常并不要求强制处理,不加 try-catch 和 throws 编译时也不会提示错误
- 常见的非检查异常有
- 空指针异常
- 算术异常(例如10/0)
- 数组索引越界异常
- 类型转换异常
- ...