La sentencia try-with-resources de Java

Escrito por picodotdev el .
java planeta-codigo programacion
Comentarios

Java

Una de las novedades que incorporó Java 7 es la sentencia try-with-resources con el objetivo de cerrar los recursos de forma automática en la sentencia try-catch-finally y hacer más simple el código. Aquellas varaibles cuyas clases implementan la interfaz AutoCloseable pueden declararse en el bloque de inicialización de la sentencia try-with-resources y sus métodos close() serán llamados después del bloque finally como si su código estuviese de forma explícita.

Un ejemplo de código que lee una línea de un fichero usando la sentencia try-with-resources es la siguiente de Java 7. Como se observa no es necesario llamar de forma explícita al método close para liberar los recursos de la instancia de la clase BufferedReader.

Anteriormente a Java 7 esto se debía hacer de la siguiente manera con unas pocas lineas más de código algo menos legibles.

El código es similar pero no es equivalente. Observesé que require declarar la variable br fuera del ámbito de la sentencia try-catch-finally donde se usa. Además, si se produce una excepción en el bloque try y posteriormente en el bloque finally en Java 6 la excepción del bloque try se enmascara y la que se lanza es la del bloque finally.

La excepción que se lanza en el bloque try y usando el método Throwable.addSuppressed() que se añadió en la API en Java 7 junto con el método Throwable.getSuppressed() se obtienen las excepciones enmascaradas o suprimidas en la sentencia try-with-resources. El orden de ejecución de los bloques de una sentencia try-with-resources es el indicado en los números emitidos con el método println.

La mayoría de clases relacionadas con entrada y salida implementan la interfaz AutoCloseable como las relacionadas con el sistema de ficheros y flujos de red como InputStream, también las relacionadas con la conexión de base de datos mediante JDBC con Connection.