请告诉每个程序,方法调用的数量是无限的还是最终的,并解释原因。这些是来自 Bloch - Java Puzzlers #45 的示例
1)
public static void main(String[] args)
{
try
{
main(args);
}
catch(StackOverflowError e)
{
main(args);
}
}
2)
public static void main(String[] args)
{
try
{
main(args);
}
catch(StackOverflowError e)
{
main(args);
}
finally
{
main(args);
}
}
有一点我想弄清楚。例如,JVM 中 Stack 的深度是 1024。我们运行这个程序,方法 Main 被调用了 1024 次,然后它发生了 StackOverflowError,我们第一次进入 catch 块,再次调用方法 main。那么,我们现在处于哪个深度?1024?1023?1025?? 或者第一个堆栈被填满,然后另一个堆栈被创建,我们从 0 开始?这个怎么运作?在第二个例子中,我们最终会被阻止吗?