A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© chjxs 中级黑马   /  2012-10-4 21:36  /  2161 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 这个问题我一星期起码能见5帖以上。.

查看全部评分

2 个回复

倒序浏览
本帖最后由 崔朋朋 于 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语句。

评分

参与人数 1技术分 +1 收起 理由
王海宇 + 1 finally之前有System.exit(0)好像就不行了.

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马