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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨千里 中级黑马   /  2012-9-15 22:35  /  1658 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨千里 于 2012-9-16 11:33 编辑

public class Test
{
         public static String output="";
         public static void foo(int i)
        {
              try
              {
                     if(i==1)
                     {
                          throw new Exception();
                     }
                          output ="1";
              }
            catch(Exception e)
            {
                   output ="2";
                   return;                  //这个return  是 神马 意思?  它有什么用?
            }
            finally
            {
                 output ="3";              
            }
            output ="4";
            }
public static void main(String args[]){
            foo(0);
            foo(1);  
}
}
结果是13423.       foo(0)的结果是134. 这个知道               但 foo(1)的结果是23?有点不明白

评分

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

查看全部评分

5 个回复

倒序浏览
return结束方法的运行,但finally内的代码一定会执行,这个retrun是起到迷惑的作用吧
回复 使用道具 举报
问题1  //这个return  是 神马 意思?  它有什么用?
这个foo函数的返回值类型是void,就是没有具体返回值类型,所以return后面不能跟参数。在这里return的作用是返回调用他的函数,foo函数执行完毕。
————————————————————————————————————————————————————————————————————————————

问题2 但 foo(1)的结果是23?有点不明白
搞清楚执行顺序就明白了

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
return的作用是退出foo方法,finally块的作用是不管try块里有没有捕获到异常都要执行finally块中的语句,当执行到return语句时就要在执行了finally块中的语句之后再退出foo方法
回复 使用道具 举报
本帖最后由 张飞年 于 2012-9-15 23:08 编辑

楼主这个问题有关键处是要明白return执行顺序:foo(0)不再说了,调用foo(1)时先到try里判断是否==1,条件为真时执行异常,接下来到CATCH处理异常,输出“2”接着就return了,但是在return时先执行了finally里的内容,所以输出“23”,关于这个问题的更加详细的原理在于老师的面试宝典,上次我也回答了这么个问题呢,http://bbs.itheima.com/thread-25257-1-1.html    里面有我详细解释,这里就不复制了。
回复 使用道具 举报
楼主:
首先return()语句表示一个方法返回的值
当return单独使用的时候,return语句通常用在一个方法体的最后,以退出该方法并返回一个值。
在Java语言中,单独的return语句用在一个方法体的中间时,会产生编译错误,因为有一些语句
执行不到。但可以通过把return语句嵌入某些语句像: if…else来使程序在未执行完方法中的所有语句时退出:、

void method(int  a)
{
    if( iVar>0 )
   {
      return;
    }
  else
  {
      System.out.println(iVar);
    }
  }


其次:楼主的代码有些毛病
应该是这样的
public class Test
{
         public static String output="";
         public static void foo(int i)
        {
              try
              {
                     if(i==1)
                     {
                          throw new Exception();
                     }
                          output+="1";
              }
            catch(Exception e)
            {
                   output+="2";
                   return;                  //这个return  是 神马 意思?  它有什么用?
            }
            finally
            {
                 output+="3";              
            }
            output+="4";
            }
public static void main(String args[]){
            foo(0);
   System.out.println(output);
            foo(1);  
   System.out.println(output);
}
}

执行到foo(0)的时候不满足try,所以执行 output ="1";
这时 output =""+"1";
再执行finally语句则output=""+"1"+"3"
执行最后的则 output=""+"1"+"3"+"4"
所以foo(0)为134

而执行foo(1)由于output是static静态的,所以outpur为""
满足try,抛出异常,执行catch语句,output变成"'+"2"
再执行finally语句,output=""+"2"+"3"
程序最后一句话是执行不到的

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