概述
异常的基类是 Throwable, Throwable 有两个子类:
Exception: 表示可以恢复的异常, 编译器可以捕捉。Error: 表示编译时和系统错误, 表示系统在运行期间出现了严重的错误, 属于不可恢复的错误。
受检异常和非受检异常
- 受检异常指的是在编译期间会接受编译器检查, 且必须要处理(
try... catch处理掉或直接在方法签名中使用throws抛出), 否则会编译出错。- 此类异常是除了
RuntimeException和Error外所有的异常, 例如IOException、InterruptedException、SQLException。
- 此类异常是除了
- 非受检异常 指的是编译期间不会接受编译器检查, 不必处理的异常。
- 此类异常包括了
RuntimeException和Error的所有异常。
- 此类异常包括了
异常处理
一般有两种方法来处理异常 : try...catch 或直接在方法签名中使用 throws 抛出。
catch 使用注意事项
- 参数的异常类型必须是
Throwable类型。 - 如果有多个
catch语句块, 则从上到下必须按照从 子类到父类 的顺序排布, 否则会编译出错。
finally 使用注意事项
finally里面的代码一般情况下会执行, 但是如果在try或者catch中执行System.exit(1)(即虚拟机退出)时, 不会执行finally中的代码。finally中最好不要出现return语句, 因为最终执行的一定是finally里面的return。