W celu dostarczenia uzasadnionego dowodu, że ta WOLA ostatecznie wygasa, oferuję następujący raczej bezsensowny kod. Uwaga: Java nie jest moim językiem, pod żadnym względem najbardziej żywej wyobraźni. I propozycja to tylko do wspierania odpowiedź Piotra, która jest poprawną odpowiedź na pytanie.
Ta próba symulacji warunków tego, co się dzieje, gdy wywołanie NIE może się zdarzyć, ponieważ spowodowałoby to przepełnienie stosu. Wydaje mi się, że najtrudniejszą rzeczą, której ludzie nie rozumieją, jest fakt, że inwokacja nie zdarza się, gdy nie może .
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+")");
}
}
}
Rezultat tego małego bezsensownego stosu maź jest następujący, a faktyczny wyjątek może być zaskoczeniem; Aha, i 32 try-call (2 ^ 5), co jest całkowicie oczekiwane:
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
klauzuli zostaną przeniesione na wyższy poziom. Ale nie wstrzymuj oddechu; liczba wykonanych kroków wyniesie około 2 do (maksymalnej głębokości stosu), a rzucanie wyjątków nie jest też do końca tanie.