我有以下代码片段:
public static void main(String[] args) {
foo();
}
public static void foo() {
try {
foo();
} catch (Throwable t) {
foo();
}
}
谁能解释一下这是怎么回事?请详细说明。
<小时/>我已经更改了这一部分并添加了 println
方法来显示一些内容:
...
try {
System.out.println("+");
foo();
} catch (Throwable t) {
System.out.println("-");
foo();
}
...
我收到这样的信息(该过程尚未停止):
+
+
+
+
+--
+--
+
+--
+--
+
+
+--
+--
+
+--
+--
+
+
+
+--
+--
最佳答案
foo
退出的唯一方法是 stackoverflow。我们可以通过以下方式模拟效果
public static void foo(int i)
{
if(i>=N) return; // stack too deep
foo(i+1);
foo(i+1);
}
对于最大堆栈深度来说,这是指数级昂贵的。
在我的机器上,花费的时间约为6ns * 2^N
最大堆栈深度超过 10,000,因此大约需要
10000000000000000000000000000000
....
(thousands of zeros)
...
00000000000000000000000000000000
完成该计划的年数,给出或采用一个常数因子:)
关于java - try-catch 语句中的递归调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32319161/