2013-04-12 6 views
21

Per esempio:Java: l'eliminazione di un'eccezione uccide il suo metodo?

public String showMsg(String msg) throws Exception { 
    if(msg == null) { 
     throw new Exception("Message is null"); 
    } 
    //Create message anyways and return it 
    return "DEFAULT MESSAGE"; 
} 

String msg = null; 
try { 
    msg = showMsg(null); 
} catch (Exception e) { 
    //I just want to ignore this right now. 
} 
System.out.println(msg); //Will this equal DEFAULT MESSAGE or null? 

che sto bisogno di ignorare sostanzialmente eccezioni in alcuni casi (di solito quando più eccezioni possono essere lanciati da un metodo e uno non importa in un caso particolare) Così, nonostante l'esempio patetico che ho usato per semplicità il ritorno in showMsg è ancora in esecuzione o il lancio restituisce effettivamente il metodo?

+3

Il tuo codice mostra già che cosa fa. –

+1

Evita di lanciare eccezioni 'new', perde lo stack di chiamate. –

+0

@jahroy non credo, finalmente i blocchi vengono eseguiti anche dopo l'eccezione –

risposta

34

La dichiarazione returnnon viene eseguita se viene generata l'eccezione. Lanciare un'eccezione fa sì che il flusso di controllo del programma passi immediatamente al gestore dell'eccezione (*), saltando qualsiasi altra cosa sulla strada. Quindi in particolare msg sarà null nella dichiarazione di stampa se è stata generata un'eccezione da showMsg.

(*) Tranne che le istruzioni nei blocchi finally verranno eseguite, ma qui non è rilevante.

+5

Un altro _exception_ alla regola (nessun gioco di parole) sarebbe se il metodo in questione _catches_ l'eccezione. Puoi _can_ generare esplicitamente un'eccezione in un blocco try e catturarlo nel blocco catch corrispondente. Detto questo, la tua risposta probabilmente copre questo scenario con la tua scelta di parole: "_... fa sì che il flusso di controllo passi immediatamente al gestore delle eccezioni ** **". – jahroy

Problemi correlati