Jetez un œil aux deux méthodes suivantes:
public static void foo() {
try {
foo();
} finally {
foo();
}
}
public static void bar() {
bar();
}
L'exécution bar()
entraîne clairement un StackOverflowError
, mais foo()
pas (le programme semble simplement fonctionner indéfiniment). Pourquoi donc?
bar()
, cependant.
finally
clause se propageront au niveau supérieur. Mais ne retenez pas votre souffle; le nombre d'étapes prises sera d'environ 2 à la (profondeur de pile maximale) et le lancement d'exceptions n'est pas exactement bon marché non plus.