Smemoratezze dal sottosuolo

Un blog che è uno spettacolo anche quando è offline

Archive for the ‘finally’ tag

Java, come si comporta il finally se si rilanciano eccezioni?

with 11 comments

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.

Written by StM

February 1st, 2008 at 8:27 pm

Posted in how-tos

Tagged with , , , , ,