Java实例说明 return在try/catch/finally中的一个注意点

有一个问题:

try{}里有一个return语句,那么紧跟在这个try后的finally{}里的代码会不会被执行,什么时候被执行,在return前还是后? 


答案用例子验证:

public class StackOverflowTest {
public static void main(String[] args) {
String aString = getFun();
System.out.println(aString);
}



private static String getFun() {
String aString = "try";
try {
System.out.println(aString);
return aString;
} catch (Exception e) {
// TODO: handle exception
} finally {
aString = "finally";
System.out.println("finally");
return aString;
}

}
}


运行结果:

try
finally
finally


说明:finally会执行,而且在try的return前


但是这个例子发现一个问题,finally改变了函数的返回值


注意:

finally中改变返回值的做法是不好的,因为如果存在finally代码块,try中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,然后如果在finally中修改了返回值,就会返回修改后的值。

显然,在finally中返回或者修改返回值会对程序造成很大的困扰,C#中直接用编译错误的方式来阻止程序员干这种龌龊的事情,Java中也可以通过提升编译器的语法检查级别来产生警告或错误,Eclipse中可以在如图所示的地方进行设置,强烈建议将此项设置为编译错误。



如果是warning


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值