今天一天都在在做老师给的面试题。虽然就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,原因就尘埃落定了!