Direkt zum Hauptinhalt springen
eLearner.app
Modul 5 · Lektion 2 von 210/14 im Kurs~12 min
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.

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

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.

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());
}

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.

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!");
    }
}

Probiere es aus

Übung#java.m5.l2.e1
Versuche: 0Wird geladen…

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.

Editor wird geladen…
Hinweis anzeigen

Deklarieren Sie den `BufferedReader` in runden Klammern direkt nach `try` und fangen Sie `IOException` ab.

Lösung nach 3 Versuchen verfügbar

Übung#java.m5.l2.e2
Versuche: 0Wird geladen…

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.

Editor wird geladen…
Hinweis anzeigen

Verwenden Sie `try (CustomResource res = new CustomResource())` und rufen Sie `res.doWork();` darin auf.

Lösung nach 3 Versuchen verfügbar

Übung#java.m5.l2.e3
Versuche: 0Wird geladen…

Deklarieren Sie FirstResource und SecondResource gleichzeitig im selben try-with-resources-Konstrukt. Behandeln Sie Exception, indem Sie 'Error' ausgeben.

Editor wird geladen…
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