当try、catch中有return时,finally中的代码会执行吗
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,程序会提前退出,也就是说返回的值不是try或catch中的值
}
// return a; //不可达代码,前面try语句已经退出了,这以下都不会执行
}
}
总结
不管有没有异常,finally中的代码都会执行
当try、catch中有return时,finally中的代码依然会继续执行
finally是在return后面的表达式运算之后执行的,此时并没有返回运算之后的值,而是把值保存起来,不管finally对该值做任何的改变,返回的值都不会改变,依然返回保存起来的值。也就是说方法的返回值是在finally运算之前就确定了的。 除非finally中有return 如果是这样,则返回的值不是try catch运算的值,会被finally语句改变,
所以不建议在finally值中写return返回