【问题标题】:Finally block overriding in java [duplicate]最后在java中阻止覆盖[重复]
【发布时间】:2019-05-08 23:49:51
【问题描述】:

下面是我关于简单 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
符合预期。


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

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

结果:1​​2


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

【问题讨论】:

标签: java try-finally


【解决方案1】:

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

System.out.println 表示到达代码所在的地方就打印出来。 (= 在运行时)

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

希望这会有所帮助。

【讨论】:

  • 那么为什么在第一个示例中最终块的结果首先执行?
  • 你的意思是你的第一部分代码?因为在您的第二个中,finally 块覆盖了您的 try 块,因为它在最后执行...
  • 我找到了原因并编辑了我的答案。
  • 谢谢你的解释..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-30
  • 2013-06-11
  • 1970-01-01
  • 2013-08-10
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多