202000629——finally與return

執行順序
1)執行:expression ,計算表達式值,保存在操作數的棧頂
2)執行:操作數棧頂的結果,複製到局部變量區作爲結果
3)執行:finally中的代碼
4)執行:將第二步複製到局部變量的返回值再複製回到操作數的棧頂
5)執行:return,返回操作數棧頂的值。

總結
我們可以看到,在第一步執行完畢後,整個方法的返回值就已經確定了,由於還要執行finally代碼塊,因此程序會將返回值暫存在局部變量區,騰出操作數棧用來執行finally語句塊中代碼,等finally執行完畢,再將暫存的返回值又複製回操作數棧頂。所以無論finally語句塊中執行了什麼操作,都無法影響返回值,所以試圖在finally語句塊中修改返回值是徒勞的。因此,finally語句塊設計出來的目的只是爲了讓方法執行一些重要的收尾工作,而不是用來計算返回值的。

比如我今天用到的讀寫鎖,finally就是用來進行unlock的操作。

**補充 **
返回的如果是基本類型,那麼肯定是不會變得。
如果是引用類型,記住,返回的地址,可以在finally改變地址。所以引用類型不是改變的地址,而是改變地址的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章