您的位置:首页 > 其它

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

2016-04-08 21:51 260 查看
先看例子

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: