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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 位俊鹏 中级黑马   /  2014-3-3 00:08  /  842 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public  class Test {
      public static void main(String[] args) {
          // TODO Auto-generated method stub
          System.out.println(new Test().test());;
     }
     int test()
     {
          try
          {
              return func1();
          }
          finally
          {
              return func2();
          }
     }
     
     int func1()
     {
          System.out.println("func1");
          return 1;
     }
     int func2()
     {
          System.out.println("func2");
          return 2;
     }   
}
-----------执行结果-----------------
func1
func2
2
跟之前的那个一样,是不是return语句执行了但并没有输出,在finally之后才输出,但已经被新的return 2 ;给覆盖了??

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

4 个回复

倒序浏览
我感觉应该是try里面的代码在return之前先执行finally里面的代码,结果再finally面return了,try里面就没有return了
回复 使用道具 举报
我想当执行到try{ }的代码时,当时的返回值也确实是 1,只是当执行到finaliy时,它的返回值变成啦2 ,可以理解为
前面的返回者被覆盖啦。就如同,x=1,当我们再次给x赋值。x=2,一样。我们在来输出x ,的值就会是2啦。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
方法是只能有一个返回值的,finally是最后执行,所以返回值就是func2()里的return语句了,覆盖这样说也是对的吧
回复 使用道具 举报
当执行到try{ }的代码时,返回值为 1,当执行到finaliy时,返回值变成2 ,可以理解为
前面的返回值被后面覆盖了。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

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