当抛出StackOverflowError
时,堆栈是否在Java中清空?
换句话说,如果我编写以下递归,堆栈会发生什么:
public void Test()
{
System.out.println("TEST");
try
{
Test();
}
catch(StackOverflowError e)
{
Test();
}
}
答案 0 :(得分:1)
Test()
方法会抛出另一个StackOverflowError
。
答案 1 :(得分:1)
这引发了很多StockOverflowErrors!假设您的配置支持的最大堆栈深度为1000次调用,则抛出2 ^ 1000个异常!每次调用Test()都会在try子句中调用一次Test()函数,并在catch子句中调用一次,因此它是一个指数的错误抛出(和捕获),直到最后一个被委托给顶部。
但是要在标题中回答你的问题:堆栈被丢弃,直到捕获异常的函数。