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语句。

相关文章
相关标签/搜索