Queste sono due cose diverse:
- Il blocco catch viene eseguito solo se viene generata un'eccezione nel blocco try.
- Il blocco finalmente viene eseguito sempre dopo il blocco try (-catch), se viene generata un'eccezione o meno.
Nel tuo esempio non hai mostrato il terzo possibile costrutto:
try {
}
catch( SpecificException e ) {
}
catch( Exception e ) {
}
finally {
}
E, come dice @codeca nel suo commento, non c'è modo di accedere all'eccezione all'interno del blocco finalmente, perché il blocco finale viene eseguito anche se non ci sono eccezioni.
Ovviamente potresti dichiarare una variabile che contiene l'eccezione al di fuori del tuo blocco e assegnare un valore all'interno del blocco catch. Successivamente puoi accedere a questa variabile all'interno del tuo blocco finalmente.
Throwable throwable = null;
try {
}
catch( Throwable e ) {
throwable = e;
}
finally {
if( throwable != null ) {
}
}
Throwable
dalfinally
blocco, perché potrebbe non esserci un fileThrowable
.