Ho un piccolo problema di teorico con le strutture try-catch.Eccezione Java non rilevata?
ho preso un esame pratico di ieri su Java e non capisco seguente esempio:
try {
try {
System.out.print("A");
throw new Exception("1");
} catch (Exception e) {
System.out.print("B");
throw new Exception("2");
} finally {
System.out.print("C");
throw new Exception("3");
}
} catch (Exception e) {
System.out.print(e.getMessage());
}
La domanda era: "che cosa l'output sarà simile?"
Ero abbastanza sicuro che sarebbe AB2C3, MA sorpresa a sorpresa, non è vero.
La risposta corretta è ABC3 (testato e davvero è così).
La mia domanda è: dove è finita l'eccezione ("2")?
+1 Ahh uomo, conoscevo questa risposta. Mi è stato chiesto questo in un'intervista. È un'ottima domanda per capire come try/catch/finalmente funziona nello stack. –
C'è solo una dichiarazione di stampa che può stampare un numero (l'ultimo: 'print (e.getMessage())'). Pensavate che l'output sarebbe stato 'AB2C3': pensavate che il blocco 'catch' più esterno sarebbe stato eseguito due volte? –
In java, prima che venga eseguita un'istruzione che trasferisce il controllo dal blocco catch, il blocco finally viene eseguito a condizione che esista. Se solo il codice nel blocco finally non trasferisce il controllo all'esterno, viene eseguita l'istruzione ritardata dal blocco catch. – Thomas