This question already has answers here:
Multiple returns: Which one sets the final return value?
                                
                                    (7个答案)
                                
                        
                5年前关闭。
            
        

我正在经历几个在工作面试中经常问到的问题(至少在我的国家-瑞士),而且我不确定应该是棘手的代码块的输出。很高兴听到您认为正确答案是什么。

这里是 :

 public class LanguageTest12 {

   public static void main(String... args){
       System.out.println(foo());
   }

   private static int foo() {
      int a = 1, b = 2;
      try {
          return a+b;
      } finally {
          a = 10;
          b = 20;
          return a+b;
     }
   }
 }


但是我知道答案必须是这三种可能性之一:


3
30
33


(PS:以防万一有人感兴趣,这里是所有问题:http://se.inf.ethz.ch/courses/2014a_spring/JavaCSharp/exercise_sessions/ExerciseSession5.pdf

最佳答案

finally块用于必须始终运行的代码,而无论是否发生错误条件(异常)。

在try块完成之后,如果发生捕获的异常,则在相应的catch块完成之后,运行finally块中的代码。即使try或catch块中发生未捕获的异常,它也应始终运行(除非try块中有System.exit(0),因为它会在进入finally块之前关闭应用程序)。

所以你的答案是2。30

10-04 21:05