最终阻止返回值的影响
考虑以下代码:公共类测试{ 私人字符串s; 公共字符串foo(){ 尝试 { s =“ dev”; 返回s; } 最后 { s =“覆盖变量s”; system.out.println(“最终输入”); } } 公共静态void main(string [] xyz){ 测试OBJ = new Test(); system.out.println(obj.foo()); } } 执行后,代码打印“最终块中的条目”,但返回“ dev”。这是因为返回值是通过在try块中执行返回语句确定的。最终块中对“ s”的更改发生在Try Block完成后,因此没有反映在返回值中。重要的是要注意,这适用于'S'的值的更改。本身,不要更改对象“ s”参考。如果“ s”是对可变对象的引用,并且其内容在最后块中更改,则这些更改将在返回值中可见。
java语言规范(JLS)概述第14.20.2节中的行为。如果是一个try-finally语句,则如果TRY块和最终块都有返回语句,则最终块的返回值均为盛行。这是因为返回语句的执行被认为是块的突然终止。总结,方法的返回值由try块中的返回语句确定。最终对变量进行的更改,无论是在值还是通过对象修改中,都不会影响返回值,除非最终块还包括返回语句。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3