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
    块,因此将执行此块,但不会更改返回值。因此,
    最后
    块在这里是无用的。通常,
    最后
    块用于释放资源。查看以了解更多信息