JavaIntermedio2 nov 2025

El 'finally' que te devuelve a la realidad (¡y anula tu 'try'!) 🤯

snippet.java
public class FinallyMadness {
    public static int getNumber() {
        try {
            return 1;
        } finally {
            return 2;
        }
    }

    public static void main(String[] args) {
        System.out.println(getNumber());
    }
}

¿Qué crees que imprime?

Salida Esperada

1

⚠️ Salida Real

2

¿Por qué pasa esto?

¡El `finally` que te `return`a la realidad! 🤯 Normalmente, pensamos que el `return` del `try` es el jefe, ¿verdad? Pues en Java, el bloque **`finally`** tiene la última palabra, ¡incluso si el `try` ya había decidido volver con algo! Aquí la magia (o la brujería, según se mire): - El `try` dice: "¡Voy a devolver un `1`!". - Java guarda ese `1` en una cajita temporal. 📦 - Pero antes de salir, el `finally` **SIEMPRE** se ejecuta. - Y si el `finally` tiene SU PROPIO `return`, ¡ese `return` es el que manda! 👑 El valor del `try` se olvida y se sobreescribe. Es como si un camarero te trae el plato que pediste, pero el chef sale corriendo de la cocina con un plato nuevo y dice: "¡No, este es el que te comes!". 😅 **Moraleja**: ¡No pongas `return`s en los `finally` si no quieres sorpresas! Son para limpieza, no para dictar el destino de la función.

Conceptos relacionados

control-flowexception-handlingfinally-block