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