Um vernünftige Beweise dafür zu liefern, dass dies irgendwann enden wird, biete ich den folgenden ziemlich bedeutungslosen Code an. Hinweis: Java ist NICHT meine Sprache. Ich biete dies nur an, um Peters Antwort zu unterstützen, die die richtige Antwort auf die Frage ist.
Dies versucht, die Bedingungen zu simulieren, die auftreten, wenn ein Aufruf NICHT stattfinden kann, da dies zu einem Stapelüberlauf führen würde. Es scheint mir das Schwierigste zu sein, was die Leute nicht verstehen, dass der Aufruf nicht stattfindet, wenn er nicht stattfinden kann .
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+")");
}
}
}
Die Ausgabe dieses kleinen sinnlosen Haufens von Gänsehaut ist die folgende, und die tatsächlich gefangene Ausnahme kann eine Überraschung sein; Oh, und 32 Try-Calls (2 ^ 5), was durchaus zu erwarten ist:
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
Klausel ausgelöst werden, auf die nächste Ebene übertragen werden. Aber halten Sie nicht den Atem an. Die Anzahl der Schritte beträgt ungefähr 2 bis (maximale Stapeltiefe) und das Auslösen von Ausnahmen ist auch nicht gerade billig.