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 块不会被执行:
  1. 在 finally 语句块第一行发生了异常。 因为在其他行,finally 块还是会得到执行
  2. 在前面的代码中用了 System.exit(int)已退出程序。 exit 是带参函数 ;若该语句在异常语句之后,finally 会执行
  3. 程序所在的线程死亡。
  4. 关闭 CPU。

posted @ 2020-09-14 23:47  迷思t无  阅读(148)  评论(0)    收藏  举报