当前位置:编程学习 > JAVA >>

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()); 
    } 
 

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,