Java中finally與return的順序
突然疑惑了,查一下發現竟然有點東西

直接上結論

總之finally都會在最後執行

  • 不管有沒有出現異常,finally塊中代碼都會執行
  • 當try和catch中有return時,finally仍然會執行
  • finally是在return後面的運算式運算之後執行的

return的先後涉及值改變的情況

try語句在返回前,將其他所有的操作執行完,保留好要返回的值,而後轉入執行finally中的語句,而後分為以下三種情況

  • 情況一:如果finally中有return語句,則會將try中的return語句“覆蓋”掉,直接執行finally中的return語句,得到返回值,這樣便無法得到try之前保留好的返回值。

  • 情況二:如果finally中沒有return語句,也沒有改變要返回值,則執行完finally中的語句後,會接著執行try中的return語句,返回之前保留的值。

  • 情況三:如果finally中沒有return語句,但是改變了要返回的值,這裡有點類似與引用傳遞和值傳遞的區別,又分以下兩種情況

    • 如果return的資料是基底資料型別或文本字串,則在finally中對該基本資料的改變不起作用,try中的return語句依然會返回進入finally塊之前保留的值

    • 如果return的資料是引用資料類型,而在finally中對該引用資料類型的屬性值的改變起作用,try中的return語句返回的就是在finally中改變後的該屬性的值


上次修改於 2022-01-22