difieren si
- la
try
-bloque completa lanzando un java.lang.Throwable
que no es un java.lang.Exception
, por ejemplo, porque se trata de un java.lang.Error
como AssertionError
o OutOfMemoryError
.
- el try-bloque finaliza abruptamente el uso de un estado de flujo de control de tal
continue
, break
o return
- la captura de bloque se completa bruscamente (por tirar cualquier arrojadiza, o el uso de un estado de flujo de control)
Más en general, el lenguaje java garantiza que se ejecuta un bloque finally antes de que finalice el try-statement. (Tenga en cuenta que si el try-declaración no se completa, no hay ninguna garantía sobre el fin. Una declaración puede no completarse por una variedad de razones, incluyendo la desconexión del hardware, el apagado del sistema operativo, VM apagado (por ejemplo, debido a System.exit
), el hilo en espera (Thread.suspend()
, synchronized
, Object.wait()
, Thread.sleep()
) o ser de otro modo ocupado (bucles sin fin, ,,,).
por lo tanto, un bloque finally
es un lugar mejor para acciones de limpieza que el extremo del cuerpo del método, pero en sí mismo, todavía no puede garantizar la limpieza exeuction
corrección:. un bloque finally _es_ ejecuta cuando se lanza un java.lang.Error no podría ejecutar con éxito, pero sí ejecutar Además, hay aire adicional.. condiciones que pueden frustrar la ejecución de un bloque finally, consulte mi respuesta para una lista incompleta. – meriton
Nota: Si la JVM se cierra mientras se está ejecutando el código try o catch, entonces el bloque finally no se puede ejecutar. Del mismo modo, si el subproceso que ejecuta el código try o catch se interrumpe o se cancela, el bloque finally no se puede ejecutar aunque la aplicación como un todo continúe. - https://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html – Hansa