Salt la conținutul principal
Modulul 5 · Lecția 2 din 210/14 în curs~12 min
Lecții din modul (2/2)

Încearcă-cu-resurse

În versiunile mai vechi de Java, gestionarea resurselor care necesită închidere explicită (cum ar fi fișierele, conexiunile la baze de date sau fluxurile de rețea) necesita un bloc finally obligatoriu pentru a se asigura că au fost închise. Acest lucru a dus la un cod prolios și predispus la scurgeri.

Java 7 a introdus instrucțiunea try-with-resources, care garantează închiderea automată a tuturor resurselor declarate în blocul try, cu condiția să implementeze interfața AutoCloseable.

Sintaxa

Resursele sunt declarate și inițializate între paranteze imediat după cuvântul cheie try.

Java
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    String line = br.readLine();
    System.out.println(line);
} catch (IOException e) {
    System.out.println("I/O Error: " + e.getMessage());
}
// br is closed automatically here, even if an exception occurs

Declararea resurselor multiple

Puteți instanția mai multe resurse în interiorul aceluiași bloc try, separându-le cu punct și virgulă ;. Resursele vor fi închise în ordinea inversă a declarației lor.

Java
try (
    FileReader fr = new FileReader("input.txt");
    FileWriter fw = new FileWriter("output.txt")
) {
    // Use resources
} catch (IOException e) {
    System.out.println("Error: " + e.getMessage());
}

Crearea de resurse personalizate

O resursă personalizată poate fi utilizată într-un bloc try-with-resources atâta timp cât implementează java.lang.AutoCloseable și suprascrie metoda close().

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

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

Încercați-l singur

Exercițiu#java.m5.l2.e1
Încercări: 0Se încarcă…

Completați metoda readFile utilizând instrucțiunea try-with-resources pentru a inițializa un BufferedReader care împachetează un FileReader pe cale. În blocul catch, interceptați IOException și imprimați „Eroare de citire fișier”.

Se încarcă editorul...
Afișează indiciu

Declarați `BufferedReader` în paranteze imediat după `try` și implementați gestionarea `IOException`.

Soluție disponibilă după 3 încercări

Exercițiu#java.m5.l2.e2
Încercări: 0Se încarcă…

Instanciați resursa personalizată CustomResource într-un bloc try-with-resources, invocați metoda doWork() pe aceasta și gestionați Excepția prin imprimarea „Eroare”.

Se încarcă editorul...
Afișează indiciu

Utilizați `try (CustomResource res = new CustomResource())` și apelați `res.doWork();` în interiorul acestuia.

Soluție disponibilă după 3 încercări

Exercițiu#java.m5.l2.e3
Încercări: 0Se încarcă…

Declarați atât FirstResource, cât și SecondResource în același construct try-with-resources. Gestionați excepția prin imprimarea „Eroare”.

Se încarcă editorul...
Afișează indiciu

Separați declarația celor două resurse în parantezele lui `try` folosind un punct și virgulă `;`.

Soluție disponibilă după 3 încercări