Прагнучи надати обґрунтовані докази того, що це ЗНІШЕ припиниться, я пропоную наступний досить безглуздий код. Примітка: Java НЕ є моєю мовою в будь-якій частині найяскравішої фантазії. Я потух це вгору тільки підтримати відповідь Пітера, який правильну відповідь на це питання.
Це намагається моделювати умови того, що відбувається, коли виклик НЕ може відбутися, оскільки це введе переповнення стека. Мені здається, найважче, що люди не в змозі зрозуміти, що виклик не відбувається, коли він не може статися.
public class Main
{
public static void main(String[] args)
{
try
{ // invoke foo() with a simulated call depth
Main.foo(1,5);
}
catch(Exception ex)
{
System.out.println(ex.toString());
}
}
public static void foo(int n, int limit) throws Exception
{
try
{ // simulate a depth limited call stack
System.out.println(n + " - Try");
if (n < limit)
foo(n+1,limit);
else
throw new Exception("StackOverflow@try("+n+")");
}
finally
{
System.out.println(n + " - Finally");
if (n < limit)
foo(n+1,limit);
else
throw new Exception("StackOverflow@finally("+n+")");
}
}
}
Вихід цієї маленької безглуздої купи goo є наступним, і фактичний виняток, що потрапив, може стати несподіванкою; О, і 32 спроби (2 ^ 5), що цілком очікувано:
1 - Try
2 - Try
3 - Try
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
3 - Finally
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
2 - Finally
3 - Try
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
3 - Finally
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
1 - Finally
2 - Try
3 - Try
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
3 - Finally
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
2 - Finally
3 - Try
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
3 - Finally
4 - Try
5 - Try
5 - Finally
4 - Finally
5 - Try
5 - Finally
java.lang.Exception: StackOverflow@finally(5)
finally
пункту, поширяться на наступний рівень вгору. Але не затримуйте дихання; кількість зроблених кроків буде приблизно 2 (максимальна глибина стека), і викиди винятків теж не зовсім дешеві.