Dai un'occhiata ai seguenti due metodi:
public static void foo() {
try {
foo();
} finally {
foo();
}
}
public static void bar() {
bar();
}
L'esecuzione bar()
chiaramente porta a a StackOverflowError
, ma l'esecuzione foo()
no (il programma sembra funzionare all'infinito). Perché?
bar()
.
finally
clausola si propagheranno al livello successivo. Ma non trattenere il respiro; il numero di passi sarà circa 2 alla (profondità massima dello stack) e anche il lancio di eccezioni non è esattamente economico.