首頁 >Java >java教程 >為什麼Finally 區塊中的Return 語句會覆寫Try 區塊的回傳值?

為什麼Finally 區塊中的Return 語句會覆寫Try 區塊的回傳值?

Linda Hamilton
Linda Hamilton原創
2024-11-11 02:34:021046瀏覽

Why Does a Return Statement in a Finally Block Override the Try Block's Return Value?

回傳值不變的原因

在 try-finally 語句中,try 區塊的執行隨著 return 語句的執行而結束。此時,此方法傳回的變數 s 的值就是執行 return 語句時 s 的值。

儘管 finally 子句稍後修改了 s 的值,但它確實在 return 語句執行後,不要更改方法的回傳值。

不可變物件與可變物件

需要注意的是,這種行為適用於直接修改s 本身位於finally 區塊中。但是,如果 s 引用了可變物件(String 不是),則修改 finally 區塊中的物件內容將反映在傳回值中。

法律規格

Java 語言規格 (JLS) 在第 14.20.2 節中提供了這些操作的詳細指南。在本節中,它指出 try 區塊中的 return 語句構成突然終止。因此,第 14.17 節解釋了 return 語句突然結束區塊執行。

異常處理和Return 語句

如果try 區塊和finally 區塊由於return 突然終止語句,適用§14.20.2 中的規則:

  • 如果try 區塊因為拋出例外以外的原因突然退出,則執行finally塊。然後,try 語句會因為同樣的原因突然完成。
  • 如果 finally 區塊因原因 S 突然退出,則 try 語句會因原因 S 突然完成,並丟棄原始原因。

這些規則的結果是,finally 區塊中的 return 語句決定整個 try-finally 語句的回傳值,從而覆寫 try 區塊中的回傳值。類似的現像也發生在 try-catch-finally 語句中,其中 try 區塊中拋出異常並由 catch 區塊處理,並且 catch 和 finally 區塊都包含 return 語句。

以上是為什麼Finally 區塊中的Return 語句會覆寫Try 區塊的回傳值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn