try-catch-finally的使用

Hutt_1024發表於2020-09-29

try 塊: 用於捕獲異常。其後可接零個或多個 catch 塊,如果沒有 catch 塊,則必須跟一個 finally 塊。
catch 塊: 用於處理 try 捕獲到的異常。
finally 塊: 無論是否捕獲或處理異常,finally 塊裡的語句都會被執行。當在 try塊或 catch 塊中遇到 return 語句時,finally 語句塊將在方法返回之前被執行。

在以下 4 種特殊情況下,finally 塊不會被執行:

在 finally 語句塊第一行發生了異常。 因為在其他行,finally 塊還是會得到執行 在前面的程式碼中用了
System.exit(int)已退出程式。 exit 是帶參函式 ;若該語句在異常語句之後,finally 會執行
程式所在的執行緒死亡。
關閉 CPU。

注意: 當 try 語句和 finally 語句中都有 return 語句時,在方法返回之前,finally 語句的內容將被執行,並且 finally 語句的返回值將會覆蓋原始的返回值。如下:

public class Test {
    public static int f(int value) {
        try {
            return value * value;
        } finally {
            if (value == 2) {
                return 0;
            }
        }
    }
}

如果呼叫 f(2),返回值將是 0,因為 finally 語句的返回值覆蓋了 try 語句塊的返回值。