现在有一个类,     public class Test { public void haha() { try {
IllegalArgumentException e = new IllegalArgumentException("asdfsd");
throw e;
} catch (Exception e) {
haha();  // 重点在这行
e.printStackTrace();
} finally {
System.out.println("Finally block!");
} }
    }
   麻烦问一下如果有别的main方法调用函数haha(),finally块中的代码能不能执行出来?   我执行的结果是
           (1)单步debug时一直在循环里面走,无法执行到finally块中;
           (2)直接运行时会在控制台显示2810行 "Finally block!";   请问这是为什么,到底函数会不会执行finally块的呢?
  

解决方案 »

  1.   

    你一直异常 一直自调用 一直不会到finally!
    我是这么理解的
      

  2.   

    无限递归啦,当然不会执行finally
      

  3.   

    那这个意思就是说finally块最终还是会被执行的,是吧?
      

  4.   

    答:
    1)当然会执行到:finally {...}部分.即:finally{...}总是要执行的.
    2)何时才会执行到呢?
    显然这是一个递归死循环,一直递归地执行下去,此时:try块中运行时要抛出Error:java.lang.StackOverflowError(栈溢出)StackOverflowError,
    此时:JVM打印出嵌套的所有Finally block!"
      

  5.   

    在这种情况finally先于catch执行,只是后来会出现stack溢出!!!