Dans l'effort à fournir une preuve raisonnable que cette terminera finalement, je vous offre plutôt vide de sens du code. Remarque: Java n'est PAS ma langue, par un tronçon de la plus vive imagination. Je proférer ce uniquement à l'appui de la réponse de Pierre, qui est la réponse correcte à la question.
Cette tente de simuler les conditions de ce qui arrive quand une invoquer ne peut PAS arriver, car elle permettrait de créer un débordement de pile. Il me semble la chose la plus difficile des gens ne parviennent pas à saisir dans l'invoquer n'arrive pas quand il ne peut pas se produire.
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+")");
}
}
}
La sortie de cette peu inutile tas de goo est la suivante, et à l'exception interceptée peut venir comme une surprise; Oh, et 32 essayez-les appels (2^5), qui est entièrement attendus:
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)