這是一個很有趣的問題,我測試的結果是:是在return中間執行。
我在網上搜尋了一些資料,下面是參考代碼:
1 /** 2 * 3 */ 4 package com.b510.test; 5 6 /** 7 * try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行,還是在return之后執行? 8 * @author Hongten 9 * @date 2013-12-10 10 */ 11 public class TestC { 12 13 @SuppressWarnings("static-access") 14 public static void main(String[] args) { 15 System.out.println("結果: " + new TestC().test()); 16 } 17 18 static int test(){ 19 int i = 1; 20 try { 21 System.out.println("try里面的i : " + i); 22 return i; 23 }finally{ 24 System.out.println("進入finally..."); 25 ++i; 26 System.out.println("fianlly里面的i : " + i); 27 } 28 } 29 }
輸出結果:
try里面的i : 1 進入finally... fianlly里面的i : 2 結果: 1
下面是我在debug時,抓取的圖片:
上圖是程序執行到try模塊里面:變量"i"的值的情況。
上圖是程序執行到了try模塊中的return語句時,按下F5鍵,進入到finally模塊,執行finally模塊中的語句后,變量"i"的值發生了變化。
上圖是當程序執行完finally模塊后,返回到return代碼塊。
但是在最后的運行效果中,我們看到的結果是:1,而不是我們想象中的:2
為什么會出現這樣的情況:
上面我認為比較靠譜的一種解釋。
還有一種解釋為:
主函數調用子函數並得到結果的過程,好比主函數准備一個空罐子,當子函數要返回結果時,先把結果放在罐子里,然后再將程序邏輯返回到主函數。所謂返回,就是子函數說,我不運行了,你主函數繼續運行吧,這沒什么結果可言,結果是在說這話之前放進罐子里的。
========================================================
More reading,and english is important.
I'm Hongten
大哥哥大姐姐,覺得有用打賞點哦!多多少少沒關系,一分也是對我的支持和鼓勵。謝謝。
Hongten博客排名在100名以內。粉絲過千。
Hongten出品,必是精品。
E | hongtenzone@foxmail.com B | http://www.cnblogs.com/hongten
========================================================