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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 来男. 中级黑马   /  2014-5-1 21:29  /  725 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 来男. 于 2014-5-1 21:56 编辑

class Test
{
public static String output="";
public static void foo(int i)
{
  try
  {
   if(i==1)
    throw new Exception();
   output+="1";//第一步:因为0不等于1,所以此时output等于0+1,打印1.
  }
  catch(Exception e)
  {
   output+="2";//第四步:2
   return;
  }
  finally
  {
   output+="3";//第二步:3  第五步:3(前有return后就不走下面的"4"了)
  }
  output+="4";//第三步:4
}

public static void main(String[] args)
{
  foo(0);
  System.out.println(output);
  foo(1);
  System.out.println(output);
}
}
结果:13423

请问第五步是基于什么样的原因??我知道这样的现象但原因不是很清楚。

2 个回复

倒序浏览
执行   finally代码块 咯
回复 使用道具 举报
在函数中finally代码块不管在什么样的情况下最后都是要执行的,除非是在finally代码块之前就退出虚拟机(System.in),不然不管你程序遇到什么样的异常错误以及不管你是否使用了return语句结束结束当前方法,最终finally代码块还是要执行的。对于这道题,在catch里面加入return语句,也就是标志着要退出当前方法,在退出之前还要执行finally代码块,不执行其他代码块,如果不加return语句,则只是一场被捕捉到了。函数并没有执行结束,还得继续往下执行,这样就会执行到最后那条语句了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马