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研究
 * @author qian.xu
 *
 */ 
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 2013-04-08 10:34  _飘逸的腿毛  阅读(221)  评论(0)    收藏  举报

导航