程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> java-一個值得深思的問題。

java-一個值得深思的問題。

編輯:編程綜合問答
一個值得深思的問題。
 public class FinallyTest {
    public int test() {
        int i = 0;
        try {
            i++;
            return i;
        } finally {
            i--;
        }
    }
    public static void main(String[] args) {
        System.out.println(new FinallyTest().test());
        ;
    }
}

碰到一個問題:
自己分析: finally塊應該是在return之前執行吧。
Debug調試發現,當執行到return i;時,下一步執行 finally塊。
然後 到 return i;這行。i的值雖然i--了,但還是沒執行finally塊前的值。。
表述可能不清,可運行下看看。
我有點不明白其中的執行過程。

最佳回答:


是這樣的,函數的返回值是return i;決定的。注意,這裡return i;其實是對i求值之後記錄下返回值,在函數返回的時候返回。
固然i--;會改變i,但是返回值此時已經確定了。

    public int test() {
        int i = 0;
        try {
            i++;
            return i;
        } finally {
            i--;
            return i;
        }
    }

這樣寫返回0,因為返回值被再次刷新了。
你可以把return il看成如下代碼
[result] = i;
[result]是一個編譯器產生的隱含變量
你的程序其實是

 public int test() {
        int i = 0;
        try {
            i++;
            [result] = i;
        } finally {
            i--;
        }
    }
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved