您的位置:首页 > 编程语言 > Java开发

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

2017-02-13 17:27 465 查看
有一个问题:
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息