try和finally代码块中同时有返回值时,返回结果的讨论

时间:2021-11-17 20:20:05

今天一天都在在做老师给的面试题。虽然就20 个题,但是有很多自己都做不上来。后来上网查了资料才明白。 

  其中有一道面试题是这样的

1.package test;  
2.  
3.public class Test {  
4.  
5.    public static void main(String[] args) {  
6.        System.err.println(new Test().method1());
7.        System.err.println(new Test().method2());  
8.    }  
9.      
10.    public int method1() {  
11.        int x = 1;  
12.        try {  
13.            return x;  
14.        } finally {  
15.            ++x;  
16.        }  
17.    }  
18.      
19.    public int method2() {  
20.        int x = 1;  
21.        try {  
22.            return x;  
23.        } finally {  
24.            return ++x;  
25.        }  
26.    }  
27.}  

对于method1()自然不用多说。关键是method2(),一开始看就把我给难住了,try和finally代码块中同时有返回值!

一开始我是猜的会输出12,就是第一个return是1,然后到finally在return 2,两个一拼接就是12.好吧,现在想想其实挺傻逼。猜的时候我也觉着不对。所有我把代码打了一遍然后运行出来结果是2。然后自己就又猜了一种比较合理的原因。就是try里的return先在那里等着,然后执行finally代码块中的return语句,最后返回的是finally里面的return。如果说finally没有return就返回try中的。毕竟是猜的,后来自己又到网上查了查资料,也有很多人写了关于这个问题的博客,解释的原因也是和我猜的一样。因此,为什么输出2,原因就尘埃落定了!