JAVA中try,catch,finally的return研究

1.finally块和最外层有且只能有一个return,否则出编译期错误。(catch块不影响此结论)
----try块和最外层有且只能有一个return,否则出编译期错误。(try块有时,catch块也必须有return)
----return可以不写在外层而写在finally里,但是会报警告(标黄)。(try块,catch块不影响此结论)
2.finally有return时,不管有没有异常,都会从finally的return跑掉
----try块有return。没有异常(不进入catch块)时,finally块有return走finally,否则走try的return。
--------外层有也不走,其实是运行到try的return时,执行finally在返回try的return,但是finally也有return,所以相当于半路跑路了
----try块有return。有异常(进入catch块)时,finally块有return走finally,否则走catch的return。
--------解释同上,到finally时半路跑路了。

验证代码:
[java]
/**
  * JAVA中try,catch,finally的return研究
  */
public class MyReturn {  
     public String test(){
         int[] a = new int[2];
         try{
             //for(int i=0;i<2;i++){       //正常系
             for(int i=0;i<3;i++){     //异常系
                 //执行到i=2会报错
                 a[i] = i;
             }
             System.out.println("try块执行完毕");
             //return "我是try块的return";
         }catch(Exception e){
             System.out.println("catch块被执行");
             return "我是catch块的return";
         }finally{
             System.out.println("finally块被执行");
             return "我是finally块的return";
         }
         //return "我是最后一个return";
     }
      
     /**
      * @param args
      */
     public static void main(String[] args) {
         // TODO Auto-generated method stub
         MyReturn myReturn = new MyReturn();
         System.out.println(myReturn.test());
     }  
}

 

posted on 2014-05-16 22:20  IOTer  阅读(204)  评论(0编辑  收藏  举报

导航