Perché il ritorno in prova non termina il metodo?
Is it bad practice to return from within a try catch finally block?
bisogna essere consapevoli del fatto che quando si inserisce un ritorno all'interno di un'istruzione try-catch, il ritorno in sé è detenuto e gestito dal blocco di esibirci.
Il blocco eccezione memorizza solo il ritorno ed è veramente restituisce solo dopo tutte le verifiche sono fatto, il che non significa che il blocco finally sarà davvero avere un impatto sulla vostra ritorno:
public int returnVal() {
int i = 0;
try {
return i;
}
finally {
i = 99;
}
}
In In questo caso, il ritorno sarà sempre 0.
Ma nel caso in cui hai menzionato nella tua domanda, influenzi il ritorno una seconda volta, e poiché il blocco di eccezione non vuole lasciare il tuo ritorno fino a quando non è fatto con TUTTA la sua verifica, stai sempre memorizzando un valore di ritorno 2 volte nel tuo blocco di eccezioni. Il risultato sarà sempre 3.
Tieni presente che se inserisci un ritorno all'interno di try-catch-finally, tale ritorno non verrà restituito fino a quando il blocco definitivo non verrà eseguito; il ritorno stesso viene archiviato fino a quando tutto è stato verificato.
fonte
2016-01-11 16:04:08
Il blocco 'finally' viene sempre chiamato alla fine, è per questo che si chiama" finally "(pensa a" prova questo, prendi qualsiasi eccezione e finalmente fallo "). – Thomas
Il blocco 'finally' è * sempre * eseguito a prescindere da cosa .. –
sì, lo capisco, ma perché il compilatore ignora la dichiarazione di ritorno nel tentativo anche se ci arriva dentro in fase di esecuzione perché il ritorno in prova non lo fa terminare il metodo –