當finally呼叫的任何可變api,會修改返回值;當finally呼叫任何的不可變api,對返回值沒有影響。
總結一下:其實return與finally並沒有明顯的誰強誰弱。在執行時,是return語句先把返回值寫入但記憶體中,然後停下來等待finally語句塊執行完,return再執行後面的一段。
類似於
public string fun() catch (exception e) finally
}public stringbuffer fun2() catch (exception e) finally
}public string fun3() catch (exception e) finally
}
fun()返回20 fun2()返回200 fun3()返回20
也就是說, 如果return的值相當於時final的,方法返回相當於指向乙個記憶體區域並且記憶體位址不可改變, 如果是常量,則返回值不可改變, 如果是物件等變數, 那麼可以在不該變物件位址的情況下,修改物件的屬性
參考文章 return與finally到底誰先執行?.
return和finally執行順序
public class test public static int tt catch exception e finally system.out.println finally system.out.println come here return b 執行結果 yesb 25 111 fin...
java中finally和return的執行順序
注意 return的位置。從這幾個例子中可以看到,如果try之前沒有有條件的return,則try.catch finally語句塊中的語句都是順序執行 如果try中或者catch中 有return語句,那麼先執行該return,然後執行finally,如果finally中也有return,該出的返...
異常捕獲時的return和finally
以前一直認為在try,catch,finally中,try中的return 會在finally之後執行,今天和同事遇到,然後重新測試了一下,如下 主方法 param args public static void main string args 測試方法 return private static...