try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,什麼時候被執行,在return前還是後?

轉載:http://blog.csdn.net/qq_31968809/article/details/52461761
try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,什麼時候被執行,在return前還是後?

答案是:會執行  try{}中的return執行後在沒有返回數據時先去執行finally{}中的代碼,然後再返回。所以說finally{}在return中間執行。


[java] view plain copy
  1. <span style="font-size:18px;">/** 
  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. }</span>  
輸出結果:
[html] view plain copy
  1. try裏面的i : 1  
  2. 進入finally...  
  3. fianlly裏面的i : 2  
  4. 結果: 1  


解釋:
在try語句中,在執行return語句時,要返回的結果已經準備好了,就在此時,程序轉到finally執行了。
在轉去之前,try中先把要返回的結果存放到不同於a的局部變量中去,執行完finally之後,在從中取出返回結果,
因此,即使finally中對變量a進行了改變,但是不會影響返回結果。
它應該使用棧保存返回值。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章