Saltar al contenido principal
eLearner.app
Módulo 5 · Lección 2 de 210/14 en el curso~12 min
Lecciones del módulo (2/2)

Try-with-resources

En versiones más antiguas de Java, la gestión de recursos que requieren un cierre explícito (como archivos, conexiones a bases de datos o flujos de red) requería el uso obligatorio de un bloque finally para asegurar su cierre. Esto daba lugar a un código verboso y propenso a fugas de memoria (memory leaks).

A partir de Java 7, se introdujo la instrucción try-with-resources, que garantiza el cierre automático de todos los recursos declarados dentro del bloque try, siempre que implementen la interfaz AutoCloseable.

La Sintaxis

Los recursos se declaran e inicializan dentro de paréntesis inmediatamente después de la palabra clave try.

Code
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    String line = br.readLine();
    System.out.println(line);
} catch (IOException e) {
    System.out.println("Errore di I/O: " + e.getMessage());
}
// br viene chiuso automaticamente qui, anche se si verifica un'eccezione

Declarar Recursos Múltiples

Es posible instanciar múltiples recursos dentro del mismo bloque try, separándolos con un punto y coma ;. Los recursos se cerrarán en orden inverso a su declaración.

Code
try (
    FileReader fr = new FileReader("input.txt");
    FileWriter fw = new FileWriter("output.txt")
) {
    // Utilizzo delle risorse
} catch (IOException e) {
    System.out.println("Errore: " + e.getMessage());
}

Crear Recursos Personalizados

Se puede utilizar un recurso personalizado en un try-with-resources siempre que implemente java.lang.AutoCloseable y sobrescriba el método close().

Code
public class DatabaseConnection implements AutoCloseable {
    public void query(String sql) {
        System.out.println("Eseguo query: " + sql);
    }

    @Override
    public void close() {
        System.out.println("Connessione chiusa!");
    }
}

Pruébalo tú

Ejercicio#java.m5.l2.e1
Intentos: 0Cargando...

Completa el método readFile utilizando el constructor try-with-resources para inicializar un BufferedReader que envuelva un FileReader en path. En el bloque catch, captura la excepción IOException e imprime 'Error reading file'.

Cargando editor...
Mostrar pista

Declara el `BufferedReader` entre paréntesis redondos inmediatamente después de `try`, y realiza la captura de `IOException`.

Solución disponible después de 3 intentos

Ejercicio#java.m5.l2.e2
Intentos: 0Cargando...

Instancia el recurso personalizado CustomResource dentro de un bloque try-with-resources, invoca el método doWork() en él y maneja la excepción Exception imprimiendo 'Error'.

Cargando editor...
Mostrar pista

Usa `try (CustomResource res = new CustomResource())` y llama a `res.doWork();` en su interior.

Solución disponible después de 3 intentos

Ejercicio#java.m5.l2.e3
Intentos: 0Cargando...

Declara simultáneamente FirstResource y SecondResource en el mismo constructor try-with-resources. Maneja Exception imprimiendo 'Error'.

Cargando editor...
Mostrar pista

Separa la declaración de los dos recursos dentro de los paréntesis redondos de `try` con un punto y coma `;`.

Solución disponible después de 3 intentos