学习Java有几年了,但是还是有些貌似“简单”的代码值得仔细推敲,仔细记录这些点点滴滴还是很有趣的!
1.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
public class Test1 {
public static void main(String[] args) {
System.out.println(test1());
}
public static int test1() {
int x = 1;
try {
return x;
} finally {
System.out.println("执行finally");
x++;
}
}
}
答案是1,不是2!
2.下面的程序输出结果是多少(1的变形)?
public class Test1 {
public static void main(String[] args) {
System.out.println(test1());
}
public static int test1() {
int x = 1;
try {
return x;
}
finally {
return ++x;
}
}
}
答案是2,不是1 !
实际上return的执行优先级高于finally的执行优先级,但是return语句执行完毕之后并不会马上结束函数,而是将结果保存到函数栈中,然后继续执行finally块中的语句,所以最终的函数返回值是2而不是1.