黑马程序员技术交流社区

标题: JAVA中try,catch,finally的return研究 [打印本页]

作者: chjxs    时间: 2012-10-4 21:36
标题: 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。


作者: 崔朋朋    时间: 2012-10-5 00:31
本帖最后由 崔朋朋 于 2012-10-5 00:35 编辑

public class TryTest {

        public static void main(String[] args) {
                System.out.println(TryTest.test1());
                System.out.println(TryTest.test2());
        }
        
       //try、 finally、外部都有return,外部return则必须注释掉。
        //对于try 和finally,程序一定会执行finally的return,而放弃try块的return语句
        public static String test1()
        {
                try
                {
                        System.out.println("test1");
                        return "try-------------1";
                } catch (Exception e)
                {
                        
                }finally
                {
                        return "finally-----------1";
                }
                //return  "外部----------"; 此句若不注释掉,则报Unreachable code的异常。  即该句代码无法被执行到。
        }
        
        //若catch 、finally都有return,程序一定会执行finally的return,而放弃catch块的return语句
        public static String test2()
        {
                try
                {
                        throw new Exception();
                }catch (Exception e)
                {
                        e.printStackTrace();
                        return "catch------------2";
                }finally
                {
                        return "finally-----------2";
                }
        }
}

总之,记住:
finally语句块是肯定会被执行到的。若finally中有return,则执行finally中的return语句,放弃其他语句块中的return;若finally中无return,则执行try或者catch中的return语句。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2