Lektionen des Moduls (2/2)
Try-with-resources
In älteren Java-Versionen erforderte die Verwaltung von Ressourcen, die explizit geschlossen werden müssen (wie Dateien, Datenbankverbindungen oder Netzwerk-Streams), die obligatorische Verwendung eines finally-Blocks, um deren Schließung sicherzustellen. Dies führte zu verbosem Code, der anfällig für Speicherlecks war.
Ab Java 7 wurde die try-with-resources-Anweisung eingeführt. Sie garantiert das automatische Schließen aller innerhalb des try-Blocks deklarierten Ressourcen, sofern diese das Interface AutoCloseable implementieren.
Die Syntax
Ressourcen werden in runden Klammern direkt nach dem Schlüsselwort try deklariert und initialisiert.
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
Deklaration mehrerer Ressourcen
Es ist möglich, mehrere Ressourcen innerhalb desselben try-Blocks zu instanziieren, indem man sie durch ein Semikolon ; trennt. Die Ressourcen werden in umgekehrter Reihenfolge ihrer Deklaration geschlossen.
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());
}
Eigene Ressourcen erstellen
Eine eigene Ressource kann in einem try-with-resources verwendet werden, sofern sie java.lang.AutoCloseable implementiert und die Methode close() überschreibt.
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!");
}
}
Probiere es aus
Vervollständigen Sie die Methode readFile unter Verwendung des try-with-resources-Konstrukts, um einen BufferedReader zu initialisieren, der einen FileReader auf path kapselt. Fangen Sie im catch-Block die IOException ab und geben Sie 'Error reading file' aus.
Hinweis anzeigen
Deklarieren Sie den `BufferedReader` in runden Klammern direkt nach `try` und fangen Sie `IOException` ab.
Lösung nach 3 Versuchen verfügbar
Instanziieren Sie die eigene Ressource CustomResource innerhalb eines try-with-resources-Blocks, rufen Sie die Methode doWork() auf ihr auf und fangen Sie die Ausnahme Exception ab, indem Sie 'Error' ausgeben.
Hinweis anzeigen
Verwenden Sie `try (CustomResource res = new CustomResource())` und rufen Sie `res.doWork();` darin auf.
Lösung nach 3 Versuchen verfügbar
Deklarieren Sie FirstResource und SecondResource gleichzeitig im selben try-with-resources-Konstrukt. Behandeln Sie Exception, indem Sie 'Error' ausgeben.
Hinweis anzeigen
Trennen Sie die Deklaration der beiden Ressourcen innerhalb der runden Klammern von `try` durch ein Semikolon `;`.
Lösung nach 3 Versuchen verfügbar