【 史上最坑爹的Java代码系列01 】

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

猜你喜欢

转载自kdyzm.iteye.com/blog/2276217