# 前言
本文主要是对Java异常处理机制的阐述,了解Java的异常机制的设计和分类,及Java异常有哪些坑,如何在自定义异常类时避免采坑。
# 异常机制分类

异常情况是指阻止当前方法或作用域继续继续执行的情况。在Java中异常也是对象,我们可以像创建其他对象一样,用new在堆上创建异常对象。
从上图可以看到Throwable是所有异常类型的根类,它有两个重要的子类:Exception和Error。
- Error(错误)
Error表示编译时和系统错误(除特殊情况外我们无需关注),比如代码允许是JVM运行错误,或内存不足时OutOfMemoryError。
- Exception(异常)
Exception是可以抛出/处理的异常。在Java类库、用户方法及运行时故障都可能抛出Exception类型异常,我们程序员需要关注的主要是Exception。它又分为运行时异常和非运行时异常。
运行时异常:由RuntimeException和其子类异常组成。比如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)。这些异常通常是非受检异常,可以捕获处理或者不处理。一般有程序逻辑引起的。运行时异常的特点是Java编译器编译时不会检查它,就算有这种异常编译也能通过,究其原因,RuntimeException代表的是编程错误。
非运行时异常:包括RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等以及用户自定义的Exception异常。
# try-catch-finally捕获异常
在Java中使用try-catch或者try-catch-finally捕获异常。
## try块
对于有可能出现异常情况的代码块Code,我们可以把它放在try块里。
