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--;
}
}