最終阻止返回值的影響
公共類測試{ 私人字符串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