try {}里有一个return语句 finally执行顺序

时间:2021-10-31 17:31:04

先看例子

package example;

class Demo{

public static void main(String args[]) {  

    int x=1;
System.out.println(Test(x));
} private static int Test(int x) {
try{
return x;
}
finally{
x++;
} }
}

输出结果是1

package example;

class Demo{

public static void main(String args[]) {  

    int x=1;
System.out.println(Test(x));
} private static int Test(int x) {
try{
return x;
}
finally{
x++;
    return x;
} }
}

输出2

那么finally究竟是在try {}中的return之前还是之后执行的呢?

  try中的return语句调用的函数先于finally中调用的函数执行,也就是说return语句先执行,finally语句后执行。Return并不是让函数马上返回,而是return语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行finally语句后才真正开始返回。

以下代码可见运行过程

  

public static void main(String args[]) {  

    int x=1;
System.out.println(Test(x));
} private static int Test(int x) {
try{
return fun1();
}
finally{ return fun2();
} } private static int fun1() {
System.out.println("fun1()");
return 1;
} private static int fun2() {
System.out.println("fun2()");
return 2;
}
}

fun1()
fun2()
2

相关文章