- private static long count=0;
- private static int foo() {
- try {
- System.out.println("try");
- count++;
- foo();
- } catch (Throwable e) {
- System.out.println("catch");
- foo();
- }
- finally {
- return 1;
- //System.out.println("finally");
- // foo();
- }
- }
-
- public static void main(String[] args) {
- foo();
- System.out.println(count);
- }
- }
复制代码 贴子要沉了!我要顶上去!这个问题真的不是很容易啊!
做了一下测试!
按照以上代码。首先try一般会到5100多次会停止也就是count会是5100多的数字;不定,我认为是jvm决定的。每个人可能不一样;
这时会发生异常Exception in thread "main" java.lang.StackOverflowError;我怎么得到的呢。你去掉finally块就会显示了!
之所以之前没有显示的原因是由于这是一个error!我们由于有finally块结果必须要执行finally快的内容;于是又执行到了foo()函数;
但是栈已经溢出了!所以会执行的步骤会有点乱!确实我的水平有限,就可以分析到这了;
我觉得下面会是jvm怎么处理栈的内存。可能会清理一些?继续测试。。。
我感觉大家都来测试一下这个demo会很有用的!
|