Java为什么在finally块中更改返回的变量不会更改返回值?

Java为什么在finally块中更改返回的变量不会更改返回值?,第1张

Java为什么在finally块中更改返回的变量不会更改返回值?

try
与所述的执行块完成
return
语句和的值
s
在时间
return
语句执行是由该方法返回的值。finally子句稍后s(在
return
语句完成之后)更改值的事实(此时)并未更改返回值。

请注意,以上内容处理的s是对

finally
块中自身值的更改,而不是对s引用对象的更改。如果s是对可变对象的引用(String不是),并且该对象的内容在finally块中已更改,则这些更改将在返回值中看到。

有关所有 *** 作方式的详细规则,请参见

Java
语言规范的14.20.2节。请注意,执行一条return语句就算是该try块的突然终止(适用于“ 如果try块的执行由于任何其他原因而突然完成的部分,R .... ” 开头)。有关为什么语句突然终止块的信息,请参见JLS的14.17节return。

进一步详细说明:如果语句的try块和语句finally块都try-finally由于return语句而突然终止,则适用第14.20.2节中的以下规则:

如果try由于任何其他原因R [除了引发异常]突然突然完成了该finally块的执行,则将执行该块,然后可以选择:

  • 如果该
    finally
    块正常完成,则该
    try
    语句由于原因R突然完成。
  • 如果该
    finally
    块由于原因S突然完成,则该try语句由于原因S突然完成(并且原因R被丢弃)。
    结果是,块中的
    return
    语句
    finally
    确定了整个
    try-finally
    语句的返回值,并且该
    try
    块的返回值被丢弃。
    try-catch-finally
    如果该
    try
    块引发异常,它被一个
    catch
    块捕获,并且该
    catch
    块和该
    finally
    块都具有
    return
    语句,则语句中也会发生类似的事情。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4985543.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存