首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java finally 執行時機:在 return 表達式求值後、返回值拷貝前執行,不影響返回值

     編輯:程式設計綜合問答

規則總結

  1. 有無異常 `finally` **必執行**(除 `System.exit`/JVM 崩潰)。
  2. `try`/`catch` 有 `return`,`finally` 仍執行。
  3. 返回值在 `finally` 前確定:`return expr` 先計算 `expr`,將結果**暫存到局部變量表**,再執行 `finally`,最後從暫存讀取返回。`finally` 中修改變量**不影響**已暫存的返回值。
  4. `finally` 中**不要放 `return`**,會覆蓋外部返回值,導致邏輯錯誤。

字節碼視角


// 簡化邏輯
int a = 10;
try {
    return a;  // 1. 計算 a(10) → 暫存槽
} finally {
    a = 20;    // 2. 修改局部變量 a,暫存槽仍為 10
}
// 3. 從暫存槽載入 10 返回

題主圖解釋

圖中 `a=10`,`try` 中 `return a` 暫存 10,`finally` 改 `a=20`,方法返回 10。驗證了規則 3。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved