JavaIntermedio9 oct 2025
El `finally` que Siempre Tiene la Última Palabra
snippet.java
public class FinallyMystery {
public static void main(String[] args) {
System.out.println("Result: " + getMysteryNumber());
}
public static int getMysteryNumber() {
try {
return 10;
} finally {
return 20;
}
}
}¿Qué crees que imprime?
✅ Salida Esperada
Result: 10⚠️ Salida Real
Result: 20¿Por qué pasa esto?
¡Ah, el bloque `finally`! Ese amigo leal que **siempre** se ejecuta, pase lo que pase. Es como ese colega que se asegura de apagar las luces antes de irse, incluso si tú ya te habías despedido.
Aquí, nuestro método `getMysteryNumber()` tiene planes claros: devolver `10` en el `try`. Pero, ¡sorpresa! En el bloque `finally`, también hay un `return 20`. Y aquí viene la magia negra (o la lógica JVM):
- El `try` dice: "¡Me voy con un 10!"
- Pero el `finally` (que es como el director del teatro) interviene y dice: "¡Un momento! Yo tengo la última palabra y mi guion dice `return 20`". 🎭
El resultado es que el valor de retorno del `finally` **eclipsa** o **anula** cualquier `return` previo del `try` o `catch`. Es una regla de oro: si un `finally` tiene un `return`, ese será el valor que se devuelva, sin importar lo que haya sucedido antes. ¡Una lección de humildad para el `try`! 😂
Conceptos relacionados
control-flowexception-handlingfinally-block