Avatar ·

¿El bloque finally siempre se ejecuta? Trampas de JVM y System.exit()

¡Hola a todos! Soy nuevo en Java y estoy tratando de entender el manejo de excepciones. Me confunde el bloque `finally`. En los libros dicen que siempre se ejecuta, independientemente de si hubo una excepción o no. Pero encontré algunos ejemplos donde parece que no es así. Por ejemplo, este código: ```java public class FinallyTest { public static void main(String[] args) { try { System.out.println("En try"); System.exit(0); } catch (Exception e) { System.out.println("En catch"); } finally { System.out.println("En finally"); } } } ``` Esperaba ver "En finally", pero el programa simplemente terminó sin esa salida. ¿Por qué? `System.exit(0)` no es una excepción, es una terminación normal. Y otro ejemplo. Si en el bloque `try` hay un `return`, ¿el `finally` igual se ejecutará? He oído que sí, pero quiero asegurarme. ¿Y qué pasa si en `finally` también se lanza una excepción? ¿Sobrescribirá la excepción del `try`?