先說結論:
? ? ? ? ? ? try語句在返回前,將其他所有的操作執(zhí)行完澜驮,虛擬機棧并未退出陷揪,而是保留好要返回的值轉入執(zhí)行finally中的語句。分為以下三種情況:
1:如果finally中有return語句杂穷,則會將try中的return語句”覆蓋“掉悍缠,直接執(zhí)行finally中的return語句,得到返回值耐量,這樣便無法得到try之前保留好的返回值飞蚓。
2:如果finally中沒有return語句,也沒有改變要返回值廊蜒,則執(zhí)行完finally中的語句后趴拧,會接著執(zhí)行try中的return語句,返回之前保留的值山叮。
3:如果finally中沒有return語句著榴,但是改變了要返回的值,分以下兩種情況:
1)如果return的數據是基本數據類型或文本字符串聘芜,則在finally中對該基本數據的改變不起作用兄渺,try中的return語句依然會返回進入finally塊之前保留的值。
2)如果return的數據是引用數據類型汰现,而在finally中對該引用數據類型的屬性值的改變起作用挂谍,try中的return語句返回的就是在finally中改變后的該屬性的值。
測試代碼:
創(chuàng)建測試類:其中內置類Num為驗證上述第三點結論瞎饲,包含兩個測試方法test和testObj
test方法:
testObj方法:
運行結果: