try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code什么时候被执行?
网上搜索的答案,有回答是之前的,可是我自己写了代码理解为是之后,因为我理解的return语句执行完后,不是马上返回到其他程序执行,而是跳出try{},然后把finally{}执行完了再跳转;不知道我的理解对不对?还请高手指点,以下是我的实验代码:
- package javabase.finallytest;
- /*
- * 解释:
- 在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。
- 在转去之前,try中先把要返回的结果存放到不同于x的局部变量中去,执行完finally之后,在从中取出返回结果,
- 因此,即使finally中对变量x进行了改变,但是不会影响返回结果。它应该使用栈保存返回值(可以理解为finally语句是在return语句后执行的,return语句实现并不是马上返回主函数,而是等执行完finally语句后返回)
- 如果finally里面还有return 值,则try里面的return值,最终会被finally里的return值所覆盖
- */
- public class FinallyTest {
- public static void main(String[] args) {
- System.out.println(FinallyTest.test());
- }
- static int test() {
- int x = 8;
- try {
- System.out.println("before return" + x);
- return x;
- } finally {
- System.out.println("before finally" + x);
- ++x;
- System.out.println("after finally" + x);
- }
- }
- }
复制代码
|