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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Heart 中级黑马   /  2013-6-18 10:05  /  1992 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. public class  Test

  2. {
  3.        public static void  main(String args[])

  4.        {
  5.               Test t  = new  Test();
  6.               int  b  =  t.get();
  7.               System.out.println(b);
  8.        }   

  9.        public int  get()
  10.        {
  11.               try
  12.               {
  13.                      return 0 ;
  14.               }

  15.               finally
  16.               {
  17.                      return 5 ;
  18.               }
  19.        }
  20. }
复制代码
请问上面这段代码返回的是0,还是5?为什么?请具体分析一下







评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

8 个回复

倒序浏览
返回值是5,测试函数:
public class TestTry {
        public static void main(String[] args) {
                TestTry t = new TestTry();
                System.out.println(t.test());
        }
        @SuppressWarnings("finally")
        public int test(){
                try{
                        return function1();
                }finally{
                        return function2();
                }
        }
        public int function1(){
                System.out.println("function1执行");
                return 1;
        }
        public int function2(){
                System.out.println("function2执行");
                return 2;
        }
}
执行结果:
function1执行
function2执行
2
结论:finally{}中的语句在try{}之后执行,try中的return语句得到值1,此时并不会让函数立刻返回,而是把1这个值存到函数栈中,然后执行finally{},此时得到值2,并返回函数。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
返回的是5,如一楼所说try{}finally{}采用的是栈的思想。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
不管try块、catch块中是否有return语句,finally块都会执行.

而且如果finally 中有return 语句j就会覆盖前面的return语句.....

所以结果是5... 还要最好不要在try catch finally 中写return 语句....

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
在try结构中,虽然使用了return语句强制函数返回,不再往下执行,但实现上finally中的还是执行了。但除了finally外的其它语句不再被执行。
所以返回值是5;

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
返回5.

try块中的return 0;语句并不会马上返回给调用者, 而是将返回值0先存入一个内存空间, 等待finally块执行完后才返回给调用者.
而楼主说的这种情况下, 在finally块中的return 5;处直接就返回给调用者了, 然后该方法的执行就算结束了.
连finally块都不一定执行完, 自然不会再返回try块中的0了.

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
Renica 发表于 2013-6-18 10:48
返回的是5,如一楼所说try{}finally{}采用的是栈的思想。

尽量详细的描述问题
回复 使用道具 举报
加油楼主
回复 使用道具 举报
楼主您好,由于帖子长时间没有动态,我已经讲帖子改成已解决了,如有问题,可以私聊我。{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马