java - 最后在java中阻止覆盖

标签 java try-finally

下面给出的是我关于简单的finally block 的示例。

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
正如预期的那样。


但是当这种情况发生时,finally block 会覆盖 try block 的值。

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

结果:1​​2


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

最佳答案

在第一个示例中,您使用了System.out.println 2次。第一次调用函数时,第二次在函数内调用。 所以他会首先打印“finally”,因为这是你的函数中执行的最后一个 block 。最后打印 5 的原因是因为这是被调用函数的输出。 (执行函数后,输出为 5)因为“finally”在函数内部打印,显然它将首先显示(因为它在运行时打印),之后,将打印被调用函数的实际输出.不要在函数内使用System.out.println。这可能会让您感到困惑:)

System.out.println 表示到达代码所在位置时打印出来。 (= 在运行时)

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

希望这有帮助。

关于java - 最后在java中阻止覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53665683/

相关文章:

java - 如何使 Mockito.verify 忽略其他类型参数?

java - hibernate + Mysql : Data truncation: Incorrect datetime value

java - codeigniter 中的 PHP 和 Java 集成

Java 泛型 - 从泛型类型调用特定方法

c# - 使用 block : object initialization compiled into try block

java - 在 try block 中放置 JDialog,然后在匹配的 finally block 中继续执行代码是否安全?

Java 数组转换

python - 为什么我们需要 Python 中的 "finally"子句?

python - 在 finally 子句中返回值是错误的吗

C++ 如何在不尝试 {} finally{} 的情况下安全地关闭文件?