2011-10-19 7 views
6

Utilizzando una struttura try-catch-finally per recuperare un record del database, sembra che sia necessario restituire un valore all'interno di un blocco try nel caso sia andato tutto bene (come nel caso di un'eccezione la fine della funzione non è pensata per essere raggiunti). Ma se ritorno all'interno di try, è il codice finally che deve essere raggiunto (per chiudere la connessione ecc.)?Il blocco `finally` è eseguito nel caso in cui ci sia` return` all'interno di un blocco `try` o` catch`?

risposta

6

Sì,

Il risultato della try/catch espressione sarà l'ultima riga sia del blocco try o catch, ma il blocco finally sarà sempre eseguire qualunque cosa

+0

Anche se esiste un'istruzione esplicita 'return' nel blocco' try'? – Rogach

+2

si. [E questi altri caratteri per adattarsi alla lunghezza minima] –

+2

L'unico caso in cui il blocco 'finally' non viene eseguito è quando' sys.exit() 'viene chiamato all'interno del blocco' try' o 'catch'. – axel22

1

Sì.

Il punto di un finally è quello di garantire che venga eseguito un codice di pulizia indipendentemente dal percorso utilizzato dal codice per uscire dal blocco try. Succede al ritorno ordinario, quando viene lanciata un'eccezione e viene rilevata un'eccezione che non viene catturata da questo blocco try. L'unica cosa che impedirà l'esecuzione è se il programma non è in grado di lasciare il blocco try; un ciclo infinito al suo interno, o il processo viene ucciso con alcuni mezzi che impediscono il normale svolgimento dell'elaborazione, o qualcosa del genere. Sono abbastanza sicuro anche se si esce dal processo dal blocco try che il blocco finally verrà eseguito prima che il processo muoia effettivamente.

Problemi correlati