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