[英]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.