Sobes.tech
Junior

¿Siempre se ejecuta el bloque finally en una construcción try-catch?

sobes.tech AI

Respuesta de la IA

No, no siempre. finally puede no ejecutarse en los siguientes casos:

  • La finalización de la JVM durante la ejecución del bloque try o catch. Por ejemplo, al llamar a System.exit().
  • Fallo de la JVM (por ejemplo, error de memoria insuficiente o desbordamiento de pila).
  • Un ciclo infinito en el bloque try o catch.
  • La finalización del hilo que ejecuta el bloque try-catch-finally.

En otros casos, incluso si se lanza una excepción no controlada o se realiza un retorno desde el bloque try o catch, el bloque finally se ejecutará.

public class FinallyExample {

    public static void main(String[] args) {
        try {
            System.out.println("En el bloque try");
            // Salir de la JVM antes de ejecutar finally
            // System.exit(0);
            throw new RuntimeException("Excepción forzada");
        } catch (RuntimeException e) {
            System.out.println("En el bloque catch: " + e.getMessage());
            // Retornar desde catch, finally aún se ejecutará
            // return;
        } finally {
            System.out.println("En el bloque finally"); // Este código se ejecuta
        }
        System.out.println("Después de try-catch-finally"); // Este código puede no alcanzarse
    }
}