當(dāng)try、catch中有return時(shí),finally中的代碼會(huì)執(zhí)行嗎
class Solution {
public static void main(String[] args) {
System.out.println(getNum());
}
public static int getNum() {
int a = 10;
try {
System.out.println(a / 0);
a = 20;
return a;
} catch (Exception e) {
a = 30;
// e.printStackTrace();
return a;
} finally {
a = 40;
return a; //finally代碼中最好不要包含return,程序會(huì)提前退出,也就是說(shuō)返回的值不是try或catch中的值
}
// return a; //不可達(dá)代碼,前面try語(yǔ)句已經(jīng)退出了,這以下都不會(huì)執(zhí)行
}
}
總結(jié)
不管有沒(méi)有異常,finally中的代碼都會(huì)執(zhí)行
當(dāng)try、catch中有return時(shí),finally中的代碼依然會(huì)繼續(xù)執(zhí)行
finally是在return后面的表達(dá)式運(yùn)算之后執(zhí)行的,此時(shí)并沒(méi)有返回運(yùn)算之后的值,而是把值保存起來(lái),不管finally對(duì)該值做任何的改變,返回的值都不會(huì)改變,依然返回保存起來(lái)的值。也就是說(shuō)方法的返回值是在finally運(yùn)算之前就確定了的。 除非finally中有return 如果是這樣,則返回的值不是try catch運(yùn)算的值,會(huì)被finally語(yǔ)句改變,
所以不建議在finally值中寫(xiě)return返回