概述
异常的基类是 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
。