繁体   English   中英

最后尝试-捕捉- 执行try-finally块时对控制的理解包含return语句

[英]Try-Catch-Finally | Understanding of control while executing try-finally block contains return statement

任何人都可以向我解释所附的代码。该控件如何从try转移到finally以及没有return语句的情况下finally如何工作。

class TryCatchFinally{

    int ID = 0;

    public Integer test() {
        try {
            return this.ID;
        } finally {
            this.ID = 2;
        }
    }


  public static void main(String ...s) {
   TryCatchFinally obj = new TryCatchFinally();  //line 1
   System.out.println(obj.test()); //line 2
   //line 3
  }
}

实际输出为-0

在执行test()函数时,我最终将ID的值更改为2。我知道是否在主方法输出的第3行的obj.ID中写入第3行的obj.ID 我想在这里知道,第2行的结果为0。 为什么? 终于什么时候才真正被叫到这里?

finally块确实发生。 文档教程中

这样可以确保即使发生意外异常,也可以执行finally块。 但是,最后,它不仅对异常处理有用,它还使程序员避免因返回,继续或中断而意外地跳过清理代码。

但是,在到达finally块之前,结果被“返回”(该方法未退出,但返回值被临时存储),因此在return语句时, ID仍为零。

public Integer test() {
    try {
        return this.ID;   //Still 0 at time of return
    } finally {
        this.ID = 2;     //This still gets executed, but after the return value is stored
    }
}

如果在方法之后打印出ID字段:

TryCatchFinally obj = new TryCatchFinally();  //line 1
System.out.println(obj.test());
System.out.println(obj.ID);

然后您得到:

0
2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM