對於每個程序告訴請,方法的調用數量是無限或最終並解釋爲什麼。這些都是來自布洛赫的例子 - Java Puzzlers#45StackOverFlowError +遞歸有趣的把戲
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開始?怎麼運行的?第二個例子中,我們最後還會阻止嗎?
你爲什麼不試試呢? –
我確定你還沒讀過Bloch - Java Puzzlers#45 – OxomHuK
請注意,如果在finally塊中拋出異常,它將被拋出finally塊並將替換之前從catch中拋出的異常。另外你的問題是「填充第一個堆棧而另一個堆棧被創建」是沒有意義的。給定的呼叫路徑只有一個調用棧。 –