请检查以下代码并解释出行为:
class ExceptionTest2 {
int x = 5;
public int TestMethod2() {
try {
x = x + 2;
System.out.println("x value in try: " + x);
return x;
} catch (Exception e) {
} finally {
x = x + 3;
System.out.println("x value in finally: " + x);
}
return x;
}
}
public class ExceptionProg2 {
public static void main(String[] args) {
ExceptionTest2 test2 = new ExceptionTest2();
int res = test2.TestMethod2();
System.out.println("Res : " + res); // it should return 10 but returning 7.
}
}
这里返回7而不是10。
这是实际的o / p:
x value in try: 7
x value in finally: 10
Res : 7
为什么它的行为如此,当在finally块中更改x值并且'x'不是局部变量时。
请澄清我的疑问。
答案 0 :(得分:1)
当X从try
块返回时,该值存储在该方法的堆栈帧上,之后执行finally
块。