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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 祁振朋 中级黑马   /  2013-3-19 00:41  /  1758 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 祁振朋 于 2013-3-19 18:03 编辑

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;
  }
  finally
  {
   output+="3";
  }
  output+="4";
}
public static void main(String args[])
{
  foo(0);
  System.out.println(output);
  foo(1);
  System.out.println(output);
}
}

求解释代码执行流程,1 ,foo(0)执行后,改变了output的值,会不会影响到foo(2)的执行。
                                   2,foo(2)执行的结果没有看懂。请大神指点一下是怎么执行的。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

4 个回复

倒序浏览
这个题在毕老师的视频里讲过,,要注意output是静态的,你问的应该是foo(1)怎么执行的吧,
执行完foo(0)后output的值是134,执行foo(1)的时候在try块里抛出异常,进入catch块,output 的值在原来的134后面加上2变成了1342,因为catch块有return语句应该跳出函数,但后面还有finally块,在跳出函数前还要执行finally中的语句,即再加上3变成13423,而后面 output+="4"; 不在finally块中因而不会执行.所以foo(1)执行后结果为13423

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
执行完foo(0)后 output的值是134,
执行foo(1)的时候在try块里抛出异常,进入catch块,  output 的值在原来的134后面加上2变成了1342,
因为catch块有return语句 应该跳出函数,但后面还有finally块,在跳出函数前还要执行finally中的语句, 即再加上3变成13423,而后面 output+="4"; 不在finally块中因而不会执行.所以foo(1)执行后结果为13423

赞同楼上的解释!
回复 使用道具 举报
会啊 因为foo(0)执行完过后 改变了静态字符串变量output在方法区中的值啊 ,而foo(1)执行时又要涉及到变量output,所以会影响啊
执行流程,foo(0),判断没有异常 所以程序正常执行 finally是必须执行代码块 所以 foo(0)执行完 output 就变为了134
在foo(1)时,output的初始值已经变为了134,这点主意就可以了,然后判断有异常,进行catch捕捉,output变为1342,catch代码块中的return语句是要结束程序,在此之前要把没有执行完的代码执行完,finally语句是在return结束之前 必须执行的 所以 结果为13423,finally代码块一执行完,return结束程序 。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
若还有问题,请继续追问;没有的话,请将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马