黑马程序员技术交流社区

标题: 异常问题 [打印本页]

作者: 来男.    时间: 2014-5-1 21:29
标题: 异常问题
本帖最后由 来男. 于 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

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


作者: 付江涛    时间: 2014-5-1 21:34
执行   finally代码块 咯
作者: 龙健    时间: 2014-5-1 22:10
在函数中finally代码块不管在什么样的情况下最后都是要执行的,除非是在finally代码块之前就退出虚拟机(System.in),不然不管你程序遇到什么样的异常错误以及不管你是否使用了return语句结束结束当前方法,最终finally代码块还是要执行的。对于这道题,在catch里面加入return语句,也就是标志着要退出当前方法,在退出之前还要执行finally代码块,不执行其他代码块,如果不加return语句,则只是一场被捕捉到了。函数并没有执行结束,还得继续往下执行,这样就会执行到最后那条语句了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2