Het mechanisme try-with-resources werd geïntroduceerd in Java 7 voor het automatisch beheren van het sluiten van bronnen, zoals invoer- en uitvoerstreams of databaseverbindingen. Het vereenvoudigt het werken met middelen en minimaliseert foutieve lekkages.
Achtergrond van de kwestie:
Voor Java 7 moesten bronnen handmatig worden gesloten in een finally-blok, wat leidde tot duplicatie van code en fouten. Try-with-resources automatiseerde dit proces, wat de code schoner en veiliger maakte.
Probleem:
Als een bron niet expliciet werd gesloten, kan er een leakage optreden (bijvoorbeeld, de file handle of databaseverbinding werd niet vrijgegeven). In het oude schema werd het vaak vergeten om close() in het finally-blok aan te roepen, vooral bij meerdere uitzonderingen.
Oplossing:
Gebruik try-with-resources waar bronnen het AutoCloseable-interface implementeren.
Voorbeeld van gebruik:
try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) { String line = reader.readLine(); // ... } catch (IOException e) { e.printStackTrace(); }
Bij het verlaten van het try-blok wordt close() automatisch aangeroepen, wat een correcte vrijgave van middelen garandeert.
Belangrijke kenmerken:
Kan try-with-resources met meerdere bronnen worden gebruikt?
Ja, meerdere bronnen kunnen in één regel via puntkomma worden gedeclareerd:
try ( InputStream in = new FileInputStream("a.txt"); OutputStream out = new FileOutputStream("b.txt") ) { // ... }
Is het verplicht om uitzonderingen te vangen in try-with-resources?
Nee. Je kunt catch weglaten als de methode heeft aangegeven dat er uitzonderingen worden gegooid of als verwerking niet nodig is, maar vaker is catch nodig voor correcte diagnostiek.
Kunnen variabelen die buiten try() zijn gedeclareerd als bronnen voor try-with-resources worden gebruikt?
Nee, bronnen moeten binnen de haakjes van try worden gedeclareerd, anders werkt het automatisch sluiten niet.
De code opent FileInputStream zonder try-with-resources, de ontwikkelaar vergeet de stream te sluiten of sluit deze alleen bij afwezigheid van fouten. In geval van een uitzondering blijft de stoom geopend.
Voordelen:
Nadelen:
Gebruik van try-with-resources, de bron wordt rechtstreeks binnen de haakjes van try gedeclareerd, en vrijgave is altijd gegarandeerd.
Voordelen:
Nadelen: