Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Duda] Qué diferencia hay?

Hola!

Que diferencia hay si hago un finally o no?

Ejemplo, cual es la diferencia entre:

// Esto
try {
  metodoQuePuedeLanzarExcepcion();
  System.out.println("Se ejecutó");
} catch (Exception e) {
  System.out.println("Dio un error!");
} finally {
  System.out.println("Finalizó!");
}
// y esto
try {
  metodoQuePuedeLanzarExcepcion();
  System.out.println("Se ejecutó");
} catch (Exception e) {
  System.out.println("Dio un error!");
} 
System.out.println("Finalizó!");

¡Gracias!

1 respuesta

¡Hola Wilmar! Me interesó tu pregunta y se lo pregunté a Luri, esto me respondió:

La diferencia principal entre los dos códigos que mostrás radica en cómo se maneja la ejecución del bloque de código que imprime "Finalizó!".

En el primer código, el bloque finally garantiza que la instrucción System.out.println("Finalizó!"); se ejecute siempre, independientemente de si se lanza una excepción o no. Esto significa que, sin importar si el método metodoQuePuedeLanzarExcepcion() tiene éxito o genera un error, "Finalizó!" siempre se mostrará en la consola.

En el segundo código, la instrucción System.out.println("Finalizó!"); se ejecuta solo si no hay una excepción. Si metodoQuePuedeLanzarExcepcion() lanza una excepción, el flujo del programa se detiene en el bloque catch, y "Finalizó!" no se imprimirá.

Así que, en resumen, el bloque finally es útil para asegurarte de que ciertas acciones se realicen siempre, como limpiar recursos o cerrar conexiones, mientras que en el segundo código, la impresión de "Finalizó!" depende de que no ocurra una excepción.