Archive for the ‘finally’ tag
Java, come si comporta il finally se si rilanciano eccezioni?
Mi è stato dato del “blog tecnico“, quindi sono profondamente offeso. Ma ringrazio il sempre buon prostatico antiblogger per il pensiero. E per sdebitarmi rispondo a un quesito che sicuramente ha assillato lui e voi tutti fin dal primo giorno che avete visto una Java Virtual Machine. Cosa succede se lancio un’eccezione all’interno di un catch seguito da un finally? La logica dovrebbe farvi rispondere correttamente, ma potreste essere tratti in inganno. Che le vostre convinzioni non vacillino: il blocco contenuto nel finally viene eseguito sempre e comunque, cascasse il mondo (ricordatevelo, se siete allo step precedente nell’impervia strada della conoscenza: viene eseguito anche se non sono state lanciate eccezioni).
Programmino di esempio che mi sono scritto oggi mentre bestemmiavo in luganese (!):
public class ProvaFinally {
public static void main(String[] args) {
try {
try {
System.out.println("0");
throw (new Exception());
} catch (Exception e) {
System.out.println ("1");
throw(e);
} finally {
System.out.println("2");
}
} catch (Exception e) {
System.out.println("3");
}
}
}
L’output sarà:
0 1 2 3
Non vi sentite un po’ più ricchi, ora? Che bella cosa, essere sapienti.
