try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {} 里的 code 会不会被执行, 什
么时候被执行,在 return 前还是后?
也许你的答案是在 return 之前,但往更细地说,我的答案是在 return 中间执行。
在TestTryReturn这个例子中的执行顺序为:用debug进行调试,会发现,先调用的是return,再调用finally,最后在调用return
public class TestTryReturn {
public static void main(String[] args) {
System.out.println(new TestTryReturn().testreturn());
}
static int testreturn()
{
int x=99;
try
{
return x;
}
finally
{
System.out.println(x+1);
}
}
}
Return 并不是让函数马上返回,而是 return 语句执行后,将把返回结果放置进函数栈中,此时函数并不是马上返回,它要执行 finally 语句后才真正开始返回。
在TestTryReturn这个例子中的执行顺序为在TestTryReturn这个例子中的执行顺序为在TestTryReturn这个例子中的执行顺序为在TestTryReturn这个例子中的执行顺序为:先执行test中的return中的func1(),在执行finally中的return中func2()
public class Ttest {
public static void main(String[] args) {
System.out.println(new Ttest().test());
}
int test() {
try {
return func1();
} finally {
return func2();
}
}
int func1() {
System.out.println("func1");
return 1;
}
int func2() {
System.out.println("func2");
return 2;
}
}
结论:finally 中的代码比 return 和 break 语句后执行