最终在Java中覆盖重写

时间:2018-12-07 08:20:27

标签: java try-finally

下面是我关于一个简单的finally块的示例。

public class Ex2 {

    public static void main(String args[]) throws ArithmeticException {
        System.out.println(Ex2.myTestingFuncn());
    }

    public static int myTestingFuncn() {
        try {
            // first execution
            return 5;
        } finally {
            // second execution
            System.out.println("finally");
        }
    }
}

此结果是
finally
5
符合预期。


但是,当这种情况最终发生时,块将覆盖try块的值。

try {
     // first execution
     return 5;
} finally {
     // second execution
     return 12;
}

结果:1​​2


这是怎么发生的?我的意思是这些块执行的顺序是什么?
请帮忙。
谢谢

1 个答案:

答案 0 :(得分:1)

在第一个示例中,您使用System.out.println 2次。第一次调用函数时,第二次在函数内部。 因此,他将首先“最终”打印,因为这是函数中执行的最后一个块。最后打印5的原因是因为这是您调用的函数的输出。 (执行完函数后,输出为5)因为“最终”打印在函数内部,显然它将首先显示(因为它在运行时打印),然后,将打印出函数的实际输出。请勿在函数内使用System.out.println,这可能会使您感到困惑:)

System.out.println意味着仅在到达代码所在的地方将其打印出来。 (=在运行时)

在第二个示例中,返回值本身被覆盖。在第一个示例中,您只有一个返回值和一个System.out.println语句,它们彼此没有影响。

希望这会有所帮助。