黑马程序员技术交流社区

标题: 关于return的一段代码,不理解 [打印本页]

作者: 肖发腾    时间: 2012-3-29 19:59
标题: 关于return的一段代码,不理解
public class  smallT
{
        public static void  main(String args[])
        {
                smallT t  = new  smallT();
                int  b  =  t.get();
                System.out.println(b);
        }
       
        public int  get()
        {
                try
                {
                        return 1 ;
                }
                finally
                {
                        return 2 ;
                }
        }
}


结果返回的是2,为什么?
作者: 龚龙    时间: 2012-3-29 20:19
本帖最后由 龚龙 于 2012-3-29 20:26 编辑

因为finally里面的代码始终会执行到,
然而return 1也执行到了,只是返回1的值被finally返回2的值覆盖了.
就是说,你的b值首先是1,然后是2,所以打印出2.
作者: 肖发腾    时间: 2012-3-29 20:27
哦。。。知道了。。。
作者: 杨华威    时间: 2012-3-29 20:32
捕捉异常中,不管有没有发生异常,finally中的代码是一定会被执行的语句。
所以,最终返回的值是return 2;


我有一点小疑问:你为什么要写下面这一句?
smallT t  = new  smallT();

作者: 肖发腾    时间: 2012-3-29 20:46
杨华威 发表于 2012-3-29 20:32
捕捉异常中,不管有没有发生异常,finally中的代码是一定会被执行的语句。
所以,最终返回的值是return 2; ...

产生对象进行调用
作者: 应佳锋    时间: 2012-3-29 20:51
其实是 同时返回的 并没有先后 至于为什么我也不知道 张孝祥老师有讲过这道题目
作者: 肖发腾    时间: 2012-3-29 21:00
哦。。。。
作者: 郑洋洋    时间: 2012-3-29 21:30
就是验证finally语句块中的代码一定执行而已
作者: 乔玉吉    时间: 2012-3-29 21:34
通过实验总结:

这个机制是这样的---碰到try语句中的return,那么先把return的值放在某个池中,然后执行finally里面的代码块,

如果有返回值覆盖语句,就改变先前放在池中的那个值,如果没有,就把那个池中的东西取出来返回出去

class Test
{
        public static void main(String[] args)
        {
                System.out.println(test());
        }

        public static int test()
        {
                int x = 10;

                try
                {
                        return x;
                }
               
                finally
                {
                                      //x+=2;            //结果返回10---->没有return,不改变返回值
                        return x+=2;  //结果返回12---->有return,执行覆盖
                }
        }
}

作者: 黑马张平    时间: 2012-3-29 22:09
捕捉异常中,不管有没有发生异常,finally中的代码是一定会被执行的语句。
所以,最终返回的值是return 2;
作者: 姚伟涛    时间: 2012-3-29 22:13
finally最后总是要执行的,除非执行了System.exit()或者是finally里面也出现了异常




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