黑马程序员技术交流社区

标题: try、finally中return语句返回值问题 [打印本页]

作者: Heart    时间: 2013-6-18 10:05
标题: try、finally中return语句返回值问题

  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?为什么?请具体分析一下








作者: 沐有鱼丸    时间: 2013-6-18 10:35
返回值是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,并返回函数。
作者: Renica    时间: 2013-6-18 10:48
返回的是5,如一楼所说try{}finally{}采用的是栈的思想。
作者: 吕祥艺    时间: 2013-6-18 11:51
不管try块、catch块中是否有return语句,finally块都会执行.

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

所以结果是5... 还要最好不要在try catch finally 中写return 语句....
作者: 月时微    时间: 2013-6-18 12:08
在try结构中,虽然使用了return语句强制函数返回,不再往下执行,但实现上finally中的还是执行了。但除了finally外的其它语句不再被执行。
所以返回值是5;
作者: shang1jk    时间: 2013-6-18 12:14
返回5.

try块中的return 0;语句并不会马上返回给调用者, 而是将返回值0先存入一个内存空间, 等待finally块执行完后才返回给调用者.
而楼主说的这种情况下, 在finally块中的return 5;处直接就返回给调用者了, 然后该方法的执行就算结束了.
连finally块都不一定执行完, 自然不会再返回try块中的0了.
作者: 袁梦希    时间: 2013-6-18 13:08
Renica 发表于 2013-6-18 10:48
返回的是5,如一楼所说try{}finally{}采用的是栈的思想。

尽量详细的描述问题
作者: 袁梦希    时间: 2013-6-18 13:09
加油楼主
作者: 孙百鑫    时间: 2013-6-24 23:52
楼主您好,由于帖子长时间没有动态,我已经讲帖子改成已解决了,如有问题,可以私聊我。{:soso_e100:}




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