Java中try、finally語句中有return時的執行狀況

在Java中當try、finally語句中包含return語句時,執行狀況究竟是怎樣的,finally中的代碼是否執行,你們衆說紛紜,有的說會執行,有的說不會執行,到底哪一種說法正確,如今經過下面的例子加以說明:spa

     第一種狀況:try中包含return語句,finally中不包含debug

    

Java代碼  收藏代碼調試

  1. public class TestTry {  字符串

  2.     static String s="";  class

  3.     public static void main(String args[]){  test

  4.         s = test1();  bug

  5.         System.out.println("8  "+s);  im

  6.     }  static

  7.     public static String test1(){  img

  8.           

  9.         try{  

  10.             System.out.println("try.....");  

  11.             return s = "a";  

  12.         }  

  13.         finally{  

  14.             s="b";    

  15.             System.out.println("17  "+s);  

  16.         }  

  17.     }  

  18. }  

  這裏咱們定義了一個字符串 s,在try裏面將"a"賦值給s,並直接返回,在finally裏面把"b"賦值給s,最終s的值是a仍是b呢?下面是執行的結果

Java代碼  收藏代碼

  1. try.....  

  2. 17  b  

  3. 8  a  

 咱們發現最後的結果是a,可是b優先於a打印出來了,這是爲何呢?經過debug單步調試咱們發現,在執行try中的return以前會先執行 finally中的代碼,以後再執行return語句。若是finally中也包含return語句,會出現什麼狀況呢,咱們看第二種狀況。

     第二種狀況:try,finally中都包含return語句

      咱們將上面的代碼稍做改動

Java代碼  收藏代碼

  1. public class TestTry {  

  2.     static String s="";  

  3.     public static void main(String args[]){  

  4.         s = test1();  

  5.         System.out.println("8  "+s);  

  6.     }  

  7.     public static String test1(){  

  8.           

  9.         try{  

  10.             System.out.println("try.....");  

  11.             return s = "a";  

  12.         }  

  13.         finally{  

  14.             return s="b";     

  15.               

  16.         }  

  17.     }  

  18. }  

 將finally中的s="b";直接改爲return s="b";,會出現什麼樣的結果呢?字符串s是a仍是b呢?

Java代碼  收藏代碼

  1. try.....  

  2. 8  b  

 咱們發現最後的打印結果是b。

 

結論:1.不管try裏面有沒有return語句,finally語句必定都會執行(不愧是finally,名字起的好)。

        2.若是finally中沒 有return語句,try裏面有return,那麼在執行try中的return語句以前會先去執行finally中的代碼,再去執行try中的 return語句;若是在finally中也包含return語句,將會直接返回,再也不去執行try中的return語句。

相關文章
相關標籤/搜索