捕获和最后的返回语句的行为

2022-08-31 12:58:51

请参阅以下代码并解释输出行为。

public class MyFinalTest {

    public int doMethod(){
        try{
            throw new Exception();
        }
        catch(Exception ex){
            return 5;
        }
        finally{
            return 10;
        }
    }

    public static void main(String[] args) {

        MyFinalTest testEx = new MyFinalTest();
        int rVal = testEx.doMethod();
        System.out.println("The return Val : "+rVal);
    }

}

结果是返回 Val : 10。

日食显示警告:。finally block does not complete normally

catch 块中的 return 语句会发生什么情况?


答案 1

它被 中的一个覆盖,因为在其他所有内容之后执行。finallyfinally

这就是为什么,一个经验法则 - 永远不会从最后回来。例如,Eclipse会针对该代码段显示警告:“最终块无法正常完成”


答案 2

finally始终执行(唯一的例外是 )。您可以这样认为此行为:System.exit()

  1. 引发异常
  2. 捕获异常并将返回值设置为 5
  3. 最后执行块并将返回值设置为 10
  4. 函数返回

推荐