Java 将修改一个函数';s在finally块中的返回值是否生效?
考虑以下代码:Java 将修改一个函数';s在finally块中的返回值是否生效?,java,exception,Java,Exception,考虑以下代码: int dummy() { int x = 0; try { x = x + 1; throw new Exception(); } catch (Exception e) { x = x + 2; return x; } finally { x = x + 4; } 我需要在不编程的情况下“预测”此方法的行为。我的问题是,返回值是多少
int dummy() {
int x = 0;
try {
x = x + 1;
throw new Exception();
} catch (Exception e) {
x = x + 2;
return x;
} finally {
x = x + 4;
}
我需要在不编程的情况下“预测”此方法的行为。我的问题是,返回值是多少
我的猜测是,当异常发生时,最终
块将被实现,因此x
的值将为4。但是我认为这个值不会被返回。如果没有发生异常,则该值将为2并返回
我是一个完全的编程初学者(不到3个月),所以我可能遗漏了一些东西。首先,您的
intx
声明为0
输入try
块,x
变为1
抛出一个异常
,因此控件移动到catch
块
在这里,x
再获取2个并转到3
,然后值3
就可以返回了
但是,执行将继续执行finally
块和x=x+4
->7
,但这不会改变返回值,因为当返回一个int时,传递的是它的值,而不是变量x
的引用
如果你想知道更多,我相信分配给你这个谜题的人会很乐意帮助你的 调用此方法时会发生以下情况:
x=x+1
会将x
的值增加1
,即其值将变为1
。然后,抛出新异常()代码>将被执行,因此,控件将进入catch
块
catch
块内,x=x+2
会将x
的值增加2
,即其值将变为3
,这是将返回的值李>
finally
块,因此将执行此块,但不会更改返回值。因此,最后
块在这里是无用的。通常,最后
块用于释放资源。查看以了解更多信息