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.
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 occursDeclararea 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.
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().
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
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”.
Afișează indiciu
Declarați `BufferedReader` în paranteze imediat după `try` și implementați gestionarea `IOException`.
Soluție disponibilă după 3 încercări
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”.
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
Declarați atât FirstResource, cât și SecondResource în același construct try-with-resources. Gestionați excepția prin imprimarea „Eroare”.
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