Direct naar de hoofdinhoud
Module 5 · Les 2 van 210/14 in de cursus~12 min
Modulelessen (2/2)

Probeer-met-middelen

In oudere versies van Java was voor het beheren van bronnen waarvoor expliciete sluiting nodig was (zoals bestanden, databaseverbindingen of netwerkstreams) een verplicht finally blok nodig om ervoor te zorgen dat ze gesloten waren. Dit leidde tot uitgebreide en lekgevoelige code.

Java 7 introduceerde de instructie try-with-resources, die de automatische sluiting garandeert van alle bronnen die binnen het blok try zijn gedeclareerd, op voorwaarde dat ze de interface AutoCloseable implementeren.

De syntaxis

Bronnen worden tussen haakjes gedeclareerd en geïnitialiseerd onmiddellijk na het trefwoord 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

Meerdere bronnen declareren

U kunt meerdere bronnen instantiëren binnen hetzelfde try blok, waarbij u ze scheidt met een puntkomma ;. De bronnen worden gesloten in omgekeerde volgorde van hun aangifte.

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

Aangepaste bronnen maken

Een aangepaste bron kan worden gebruikt in een try-with-resources blok, zolang deze java.lang.AutoCloseable implementeert en de methode close() overschrijft.

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

Probeer het zelf

Oefening#java.m5.l2.e1
Pogingen: 0Laden…

Voltooi de readFile-methode met behulp van de try-with-resources-instructie om een ​​BufferedReader te initialiseren die een FileReader op pad wikkelt. Onderschep in het catch-blok IOException en druk 'Fout bij lezen bestand' af.

Editor laden…
Toon hint

Declareer de `BufferedReader` tussen haakjes direct na `try`, en implementeer de afhandeling van `IOException`.

Oplossing beschikbaar na 3 pogingen

Oefening#java.m5.l2.e2
Pogingen: 0Laden…

Instantieer de aangepaste bron CustomResource in een try-with-resources-blok, roep de doWork()-methode erop aan en handel Exception af door 'Error' af te drukken.

Editor laden…
Toon hint

Gebruik `try (CustomResource res = new CustomResource())` en roep `res.doWork();` erin aan.

Oplossing beschikbaar na 3 pogingen

Oefening#java.m5.l2.e3
Pogingen: 0Laden…

Declareer zowel FirstResource als SecondResource in dezelfde try-with-resources-constructie. Behandel uitzonderingen door 'Fout' af te drukken.

Editor laden…
Toon hint

Scheid de declaratie van de twee bronnen binnen de haakjes van `try` met behulp van een puntkomma `;`.

Oplossing beschikbaar na 3 pogingen