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