注:本专栏文章均为本人原创,未经本人授权请勿私自转载,谢谢。
Java异常类层次结构图
-Throwable
-Error
-AwtError
-VirtualMachineError
-StackOverFlowError
-OutOfMemoryError
-Exception
-IOException
-EOFException
-FileNotFoundException
-RuntimeException
-ClassNotFoundException
-NullPointerException
-IllegalArgumentException
-......
在 Java 中,所有的异常都有一个共同的祖先 java.lang 包中的 Throwable。Throwable 有两个重要的子类:Exception(异常) 和 Error(错误) 。
Error 是程序无法处理的错误。大多数 Error 与代码编写者执行的操作无关,一般为代码运行时 Java 虚拟机出现的问题,当这些异常发生时,Java 虚拟机一般会选择终止线程。
Exception 是程序本身可以处理的异常。Exception 类有一个重要的子类 RuntimeException。RuntimeException 异常由 Java 虚拟机抛出。
异常处理
- Try 块:用于捕获异常。其后可接零个或多个 catch 块,如果没有 catch 块,则必须跟一个 finally 块。
- Catch 块:用于处理 try 捕获到的异常。
- Finally 块:无论是否捕获或处理异常,finally 块里的语句都会被执行。当在 try 块或 catch 块中遇到 return 语句时,finally 语句块将在方法返回之前被执行(若 finally 里有 return 语句,则会提前返回,如以下代码所示)。
public static int fun(int value) {
try {
return value;
} finally {
return 0;
}
}
在以下特殊情况下,finally 块不会被执行:
- 在前面的代码中用了
System.exit(int)
已退出程序。 - 后台守护线程(daemon)被中止时。
- 断电等一系列外部因素导致的突发宕机。