Java异常简述
类图:

Java异常
java异常有一个共同的祖先:Throwable类。它有两个重要的子类:Error(错误)类和Exception(异常)类。
Error:描述了Java运行时系统的内部错误和资源耗尽错误;用户不用处理。其中虚拟机错误又分为:OutOfMemoryError和StackOverFlowError
Exception:又分为RuntimeException和其它Exception。RuntimeException是指由程序错误导致的异常。
例:NullPointerException(访问null指针)、ArrayIndexOutOfBoundsException(数组访问越界)、ArithmeticException(算术异常、除数为0)、ClassCastException(错误的类型转换)
其它异常指程序本身没有问题,但由于像I/O错误这类问题导致的异常。
例:FileNotFoundException(试图打开一个不存在的文件)、EOFException(试图在文件尾部后面读取数据)
“如果出现RuntimeException异常,那么就一定是你的问题”
受检异常和非受检异常
受检异常是指,一定要用try-catch捕获处理,或者throws向上抛出的异常。包括Exception中除了RuntimeException之外的其它异常。
非受检异常是指,不用捕获处理的异常,包括Error和RuntimeException。
try-catch-finally
- try 块: 用于捕获异常。其后可接零个或多个 catch 块,如果没有 catch 块,则必须跟一个 finally 块。
- catch 块: 用于处理 try 捕获到的异常;可以捕获多个异常;可以用“|”来合并多个异常,一起处理;可以在异常中抛出异常。
- finally 块: 无论是否捕获或处理异常,finally 块里的语句都会被执行。当在 try 块或 catch 块中遇到 return 语句时,finally 语句块将在方法返回之前被执行;当在finally中包含return语句时,该返回值会覆盖原始返回值
在以下 4 种特殊情况下,finally 块不会被执行:
- 在 finally 语句块第一行发生了异常。 因为在其他行,finally 块还是会得到执行
- 在前面的代码中用了 System.exit(int)已退出程序。 exit 是带参函数 ;若该语句在异常语句之后,finally 会执行
- 程序所在的线程死亡。
- 关闭 CPU。

浙公网安备 33010602011771号