differiscono se
- il -block
try
completa gettando un java.lang.Throwable
che non è un java.lang.Exception
, ad esempio perché è un java.lang.Error
come AssertionError
o OutOfMemoryError
.
- try-block completa bruscamente utilizzando un rendiconto controllo tale
continue
, break
o return
- il fermo-block completa bruscamente (gettando qualsiasi throwable, o utilizzando un rendiconto controllo)
Altro in generale, il linguaggio java garantisce che un blocco finally venga eseguito prima che l'istruzione try venga completata. (Si noti che se l'istruzione try non viene completata, non esiste una garanzia definitiva. Una dichiarazione potrebbe non essere completata per una serie di motivi, tra cui arresto hardware, arresto del sistema operativo, arresto VM (ad esempio a causa di System.exit
), la discussione in attesa (Thread.suspend()
, synchronized
, Object.wait()
, Thread.sleep()
) o essere altrimenti occupato (loop senza fine, ,,,).
Quindi, un blocco finally
è un posto migliore per le azioni di pulizia rispetto alla fine del corpo del metodo, ma
Correzione: un blocco finally _is_ eseguito quando viene lanciato un java.lang.Error. Potrebbe non essere eseguito correttamente, ma viene eseguito. le definizioni che possono ostacolare l'esecuzione di un blocco finale, vedere la mia risposta per un elenco incompleto. – meriton
Nota: se la JVM termina mentre viene eseguito il codice try o catch, allora il blocco finally potrebbe non essere eseguito. Allo stesso modo, se il thread che esegue il codice try o catch viene interrotto o ucciso, il blocco finally potrebbe non essere eseguito anche se l'applicazione continua nel suo complesso. - https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html – Hansa