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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 wangkai 于 2015-5-25 21:46 编辑

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);//134
  foo(1);
  System.out.println(output);//13423
}
}

3 个回复

倒序浏览
首先foo(0),进入方法,不满足if条件,所以不执行throw语句。执行 output+="1",此时output是“1”;然后因为try里面并没有抛出异常,所以catch里的语句不执行。跳到finally里,又加了个3,然后继续向下,加4.所以第一个结果就是134.               然后开始foo(1),这次满足if判断,执行throw语句,抛出异常,然后直接跳到catch语句里面,执行加2,然后读到return。这时候他已经开始准备返回了,但是在这之前要执行finally里面的语句,所以再加3.然后开始return,跳出方法。所以最后结果就是13423
回复 使用道具 举报
foo(0)时,i==0不成立,运行output+="1",然后再相继运行finally里的+=“3”和外面的+=“4”,因为是字符串,所以结果为134字符串。此时output已经为“134”了,foo(1),i==1成立,运行catch里面的代码+=“2”,就变为了1342字符串,然后return,finally里的语句是一定要执行的+=“3”,变为13423字符串。+="4"因为return,所以不执行了。最后输出就为13423
回复 使用道具 举报 1 0
哦,明白了,谢谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马