El mecanismo de manejo de excepciones a través de try-catch-finally fue agregado en Java desde el inicio del desarrollo del lenguaje. El objetivo principal es proporcionar un manejo estructurado de errores, separando el código de trabajo del código de manejo de errores.
Problema: cualquier comportamiento no estándar o erróneo provoca el lanzamiento de una excepción. Sin try-catch, solo se puede transmitir hacia arriba en la pila de llamadas. Con este enfoque, el programa puede finalizar de manera inesperada.
Solución: uso de try { } catch { } finally { }, lo que permite manejar excepciones esperadas y garantizar que se realicen acciones finales (liberación de recursos, cierre de archivos, reversión de transacciones).
Ejemplo de código:
try { FileInputStream fin = new FileInputStream("test.txt"); int data = fin.read(); } catch (IOException e) { System.out.println("Error al trabajar con el archivo: " + e.getMessage()); } finally { fin.close(); }
Características clave:
try contiene código que puede fallarcatch intercepta y maneja excepcionesfinally siempre se ejecuta, incluso con return/excepción¿Puede finalmente no ejecutarse?
Sí, si dentro del bloque se ejecuta System.exit(), el proceso termina de manera abrupta, o la JVM falla físicamente.
¿Se puede usar try-catch sin finally?
Sí, el bloque finally no es obligatorio. Pero si se requiere limpieza de recursos, generalmente se utiliza. Con Java 7 hay try-with-resources.
¿Qué sucede si hay una excepción en finally?
Si ocurre un nuevo error en finally, "anulará" el original (si no se captura por separado), lo que puede enmascarar problemas.
try { throw new RuntimeException("fallo en try"); } finally { throw new RuntimeException("fallo en finally"); } // Stacktrace final — solo "fallo en finally"
catch(Exception e) {} vacío)throw e; sin new Exception(e))En un proyecto, el bloque finally contenía código que podría lanzar IOException. Ante un error en try, la excepción original se perdía por completo, dificultando gravemente el diagnóstico de errores.
Ventajas:
Desventajas:
En lugar de finally, el equipo cambió a try-with-resources. Cada recurso implementa AutoCloseable, la liberación se realiza automáticamente, las excepciones se registran en los logs como un error propio.
Ventajas:
Desventajas: