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

Java中finally块与return之间的执行顺序

2016-06-23 14:57 531 查看
我们知道,finally块作为java异常处理机制的一部分,其中的代码无条件执行,通常执行释放资源等操作。

但是想本小白这样的初学者可能会有这样的疑惑:有返回值的方法执行到return就会结束,return与finally块之间的执行发生冲突时会发生什么呢?为了解决这种疑惑,本小白做了一下尝试:

1在try块中有return,在finally中没有return,程序执行没有异常:
public class ExceptionDemo {

public static String test(String str){
try {
return str;
} catch(Exception e){
} finally{
str = "456";
System.out.println("finally");
}
return null;
}

public static void main(String[] args) {
System.out.println(test("123"));
}
}
程序执行结果为

finally
123
这个结果说明,程序执行到return str,并没有直接返回,而是强行执行finally块,但是这是返回值str已经确定,finally中即使尝试修改也无济于事,但是“finally”依然会执行。
注意这时在finally块之外必须有return语句以保证方法一定会有返回值,否则会报编译错误。

2在try块中有return,在finally中也有return,程序执行没有异常:
public class ExceptionDemo {

public static String test(String str){
try {
return str;
} catch(Exception e){
} finally{
str = "456";
System.out.println("finally");
return str;
}
}

public static void main(String[] args) {
System.out.println(test("123"));
}
}

程序执行结果为

finally
456
这个结果说明,当finally块中包含return,程序就会无视try中的return语句,此时编译器会报异常(finally block does not complete normally)提醒我们try中的return语句将不会执行。

注意这是finally块以外就不能再有任何代码,否则会报(Unreachable code)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息