学习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.