Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java Try-with-resources meesteren: automatische resource management uitgelegd

Java Try-with-resources meesteren

Verken hoe Java's try-with-resources statement resource handling vereenvoudigt, leaks voorkomt, en code leesbaarheid verbetert.

Het try-with-resources construct garandeert dat alle resources gedeclareerd binnen de haakjes automatisch gesloten worden wanneer het blok verlaat, ofwel normaal ofwel abrupt. Een resource is elk object dat AutoCloseable of Closeable implementeert.

De syntax is:

try (ResourceType resource = new ResourceType(...)) { // gebruik de resource } catch (ExceptionType e) { // handle exceptions } 

Om het te gebruiken:

  1. Instantieer de resource binnen de try clausule.
  2. Declareer exception handling voor fouten die tijdens gebruik of sluiten kunnen ontstaan.
Let op: Alleen objecten die AutoCloseable implementeren kunnen automatisch gemanaged worden.


Voorbeeld 1: Een bestand veilig lezen

import java.io.*; public class Main { public static void main(String[] args) { try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) { String line; while ((line = br.readLine()) != null) { System.out.println("Line =>" + line); } } catch (IOException e) { System.out.println("IOException in try-with-resources blok =>" + e.getMessage()); } } } 

Uitvoer als test.txt ontbreekt:

IOException in try-with-resources blok =>test.txt (Geen dergelijk bestand of map)

Uitvoer wanneer het bestand bestaat:

Line =>test line

Hier wordt de BufferedReader automatisch gesloten na het blok, wat de noodzaak voor een finally clausule elimineert.


Onderdrukte exceptions

Wanneer zowel het try blok als de resource-sluiting exceptions gooien, heeft de exception uit het try blok voorrang, terwijl de andere onderdrukt wordt. Je kunt onderdrukte exceptions ophalen via Throwable.getSuppressed():

catch (IOException e) { System.out.println("Gegooide exception =>" + e.getMessage()); for (Throwable t : e.getSuppressed()) { System.out.println("Onderdrukte exception =>" + t); } } 

Waarom Try-with-resources gebruiken?

1. Elimineert handmatige cleanup

Voor Java 7 was een finally blok verplicht om resources te sluiten. Dat voegde boilerplate toe en potentieel voor geneste try-catch binnen de finally als sluiten zelf een exception gooide. Met try-with-resources is cleanup impliciet:

BufferedReader br = null; try { br = new BufferedReader(new FileReader("test.txt")); // gebruik br } catch (IOException e) { // handle } finally { if (br != null) { try { br.close(); } catch (IOException ignored) {} } } 

Het bovenstaande patroon is meer verbose en foutgevoelig vergeleken met:

try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) { // gebruik br } 

2. Meerdere resources in één statement

Declareer verschillende resources gescheiden door puntkomma's. Ze worden gesloten in omgekeerde volgorde van declaratie.

try (Scanner scanner = new Scanner(new File("testRead.txt")); PrintWriter writer = new PrintWriter(new File("testWrite.txt"))) { while (scanner.hasNext()) { writer.print(scanner.nextLine()); } } 

3. Java 9 verbetering

Java 9 ontspande de vereiste dat resources lokaal gedeclareerd moeten zijn. Je kunt nu een bestaande variabele hergebruiken:

Scanner scanner = new Scanner(new File("testRead.txt")); try (scanner) { // code } 

Deze feature verbetert leesbaarheid wanneer dezelfde resource elders nodig is.


Voor diepere inzichten, verwijz naar de officiële AutoCloseable documentatie en de Java 9 JEP 326 release notes.

Java

  1. Java-operators beheersen: typen, syntax en praktische voorbeelden
  2. Java-commentaar: typen, gebruik en best practices
  3. Java if…else beheersen: control flow uitgelegd
  4. Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
  5. Java break-statement: hoe, wanneer en gelabelde breaks uitgelegd
  6. Java Strings beheersen: aanmaken, methodes en best practices
  7. Java interfaces meesteren: concepten, implementatie en best practices
  8. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  9. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  10. Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
  11. Java Vector begrijpen: Gebruik, Kenmerken en Vergelijking met ArrayList