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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李玉江 中级黑马   /  2013-5-31 23:40  /  1221 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Sword 于 2013-6-1 00:40 编辑

class Test5
{
        public static void main(String[] args)
        {
                System.out.println(getValue1());//调用方法并且输出打印结果是13
                System.out.println(getValue2());//结果是6
        }

        public static int getValue1() //这个方法证明了return是在finally执行后才返回的
                {
                        int a1 = 1;
                        int a2 = 4;//定义两个变量
                        try
                                {
                                        System.out.println(a2+=8);//输出12
                                        return a1+=99;//如果是try的return先执行应该返回的是100        
                                }
                        
                        finally
                                {
                                       
                                        //return a2++;//返回的是12,
                                        return ++a2;//返回的是13,前++和后++有区别
                                        //return a1;
                                        //return a1+=200;
                                       
                                }
                                
                }

        public static int getValue2()//这个方法证明了finally无法改变返回值,最后还是6。
        {
               
                        int a3 = 3;
                try
                {
                        return a3+=3;
                }
                finally
                        {
                                a3+=11;//但是此种情况返回的是6而不是14.由此在getValue1的方法中如果finally是return的a1
                                      //输出的是100,若是return的a1+=200,则输出的是300.
                         System.out.println(a3);//打印出17
                        }
                        
        }
}
/*
总结:在此代码中。try中的return是参与计算了的。但是并没有马上返回给函数。
        如果finally里有return则将其覆盖了。但是finally在其中用到了try的return中的数据仍然会调用try的return。
        若是finally中没有return那么返回的将是try中的return。
        而在getValue2最后中finally打印的是17,只不过返回的却是try的return罢了。
所以:return确实是在finally执行完以后才返回的,如果是finally有return则会将try的return覆盖掉,
否则返回的是try中的return

评分

参与人数 1黑马币 +2 收起 理由
Sword + 2

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马