任何人都可以向我解释所附的代码。该控件将如何从try转移到finally以及没有return语句的情况下final将如何工作。
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
行写入<?php
$string = 'I have string for example ")bla bla(" and I would like to switch between the parentheses with php regex so the output will be "(bla bla)"';
echo preg_replace ( '/\)(.*?)\(/', '($1)', $string );
?>
#3。我想在这里知道,第2行的结果为0。为什么?终于什么时候才真正被叫到这里?
答案 0 :(得分:5)
确实发生了finally
块。来自docs tutorial:
这确保即使发生意外异常,也会执行finally块。但最后,它不仅对异常处理有用,它还使程序员避免因返回,继续或中断而意外跳过清理代码。
但是在到达finally
块之前,结果被“返回”(不退出该方法,但是返回值被临时存储),因此在返回语句时,{{1} }仍为零。
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);