TRY-CATCH-FINALLY

di il
3 risposte

TRY-CATCH-FINALLY

Sera ragazzi, vi pongo il seguente quesito: ammettiamo abbia una struttura try-catch-finally, ed un errore di nome Ex1 gestito dal catch. Eseguo correttamente il try e poi passo a finally, se in finally sollevassi l'errore Ex1 questo verrebbe gestito dal catch precedente od andrebbe in errore? Per esempio:

try
{
System.out.println("Sto bene!");
}
catch(Errore ex1)
{
System.out.println("NON sto bene!");
}
finally
{
throw(ex1);
}

L'errore viene gestito o no?

3 Risposte

  • Re: TRY-CATCH-FINALLY

    giulio0 ha scritto:


    se in finally sollevassi l'errore Ex1 questo verrebbe gestito dal catch precedente
    La risposta è semplice: no.
    Se un finally lancia qualcosa, non è e non può essere il catch di quello stesso try-catch-finally a catturarlo. Dovrà essere qualcun'altro "a monte".


    EDIT: questo (chiaramente inutile ma per esempio) dovrebbe chiarirti:
        public static void prova() {
            try {
                int n = 10 / 0;
            } catch (RuntimeException e) {
                System.out.println(e);
            } finally {
                throw new IllegalStateException("Boh");
            }
        }
    La divisione per 0 causa una eccezione ArithmeticException. Questa viene catturata dal catch e stampata.
    Il finally lancia IllegalStateException e questa ESCE fuori dal metodo. Sarà il chiamante (o ancora più a monte) a dover far qualcosa.
  • Re: TRY-CATCH-FINALLY

    Quel codice non compila proprio (all'interno del blocco finally, l'oggetto ex1 non è visibile: è dichiarato nel blocco catch ed è visibile solo lì).

    Se nel blocco finally venisse sollevata un'eccezione (e fosse un'eccezione checked), il compilatore ti obbligherebbe a:

    1) Gestirla all'interno di un try/catch/finally interno al finally

    oppure

    2) Gestirla con un blocco try/catch/finally esterno al blocco che contiene il finally

    oppure

    3) Dichiarare il metodo che contiene quel blocco con la clausola throws in modo che il chiamante sia costretto a gestirla.

    Le clausole catch di quel blocco finally non sono più in grado di gestire alcunchè quando il flusso ha raggiunto il finally.

    Ciao.
  • Re: TRY-CATCH-FINALLY

    Grazie tutti molto esaustivi
Devi accedere o registrarti per scrivere nel forum
3 risposte