Je suis surpris de voir comment il est possible de poursuivre l'exécution, même après un StackOverflowError
a eu lieu en Java.
Je sais qu' StackOverflowError
est un sublass de la classe d'Erreur.
La classe d'Erreur est decumented comme "une sous-classe de Throwable qui indique des problèmes graves qu'une application raisonnable ne devrait pas essayer de l'attraper."
Ceci ressemble plus à une recommandation que d'une règle, sous-tendant que d'attraper un message d'Erreur semblable à un StackOverflowError est en fait autorisé et c'est au programmeur du caractère raisonnable de ne pas le faire. Et de voir, j'ai testé ce code, et il se termine normalement.
public class Test
{
public static void main(String[] args)
{
try {
foo();
} catch (StackOverflowError e) {
bar();
}
System.out.println("normal termination");
}
private static void foo() {
System.out.println("foo");
foo();
}
private static void bar() {
System.out.println("bar");
}
}
Comment cela peut-il être? Je pense que par moment le StackOverflowError est levée, la pile doit être si plein qu'il n'y a pas de place pour l'appel d'une autre fonction. Est l'erreur du bloc de gestion de l'exécution dans une autre pile, ou ce qui se passe ici?