Java - Vyskúšajte zdroje

1. Prehľad

Podpora try-with-resources - zavedená v prostredí Java 7 - nám umožňuje deklarovať zdroje, ktoré sa majú použiť v a skús blok s ubezpečením, že zdroje budú uzavreté až po vykonaní tohto bloku.

Deklarované zdroje musia implementovať Automatické uzatváranie rozhranie.

2. Pomocou vyskúšajte zdroje

Jednoducho povedané, aby sa zdroj automaticky zatvoril, musí byť deklarovaný a inicializovaný vo vnútri súboru skús, ako je uvedené nižšie:

try (PrintWriter writer = new PrintWriter (new File ("test.txt"))) {writer.println ("Hello World"); } 

3. Výmena skúschytiť-konečne S vyskúšajte zdroje

Jednoduchý a zrejmý spôsob použitia nového vyskúšajte zdroje funkcionalita je nahradiť tradičné a podrobné skúsiť-chytiť-konečne blokovať.

Porovnajme nasledujúce ukážky kódu - prvý je typický skús chytiť-konečne blok, potom nový prístup s použitím ekvivalentného bloku try-with-resources:

Skener skener = null; try {scanner = new Scanner (new File ("test.txt")); while (scanner.hasNext ()) {System.out.println (scanner.nextLine ()); }} catch (FileNotFoundException e) {e.printStackTrace (); } nakoniec {if (scanner! = null) {scanner.close (); }}

A tu je super stručné riešenie využívajúce try-with-resources:

try (Scanner scanner = new Scanner (new File ("test.txt"))) {while (scanner.hasNext ()) {System.out.println (scanner.nextLine ()); }} catch (FileNotFoundException fnfe) {fnfe.printStackTrace (); }

Tu môžete ďalej preskúmať Skener trieda.

4. vyskúšajte zdroje S viacerými zdrojmi

Viacero zdrojov možno deklarovať v poriadku v a vyskúšajte zdroje blok ich oddelením bodkočiarkou:

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

5. Vlastný zdroj s Automatické uzatváranie

Vytvoriť vlastný zdroj, ktorý bude správne spracovaný a vyskúšajte zdroje blok, trieda by mala implementovať Uzatvárateľné alebo Automatické uzatváranie rozhrania a prepísať Zavrieť metóda:

verejná trieda MyResource implementuje AutoCloseable {@Override public void close () hodí Exception {System.out.println ("Closed MyResource"); }}

6. Uzávierka zdroja

Zdroje, ktoré boli definované / získané ako prvé, budú uzavreté ako posledné; Pozrime sa na príklad tohto správania:

Zdroj 1:

verejná trieda AutoCloseableResourcesFirst implementuje AutoCloseable {public AutoCloseableResourcesFirst () {System.out.println ("Konštruktér -> AutoCloseableResources_First"); } public void doSomething () {System.out.println ("Niečo -> AutoCloseableResources_First"); } @Override public void close () vyvolá výnimku {System.out.println ("Closed AutoCloseableResources_First"); }} 

Zdroj 2:

verejná trieda AutoCloseableResourcesSecond implementuje AutoCloseable {public AutoCloseableResourcesSecond () {System.out.println ("Konstruktor -> AutoCloseableResources_Second"); } public void doSomething () {System.out.println ("Niečo -> AutoCloseableResources_Second"); } @Override public void close () vyvolá výnimku {System.out.println ("Closed AutoCloseableResources_Second"); }}

Kód:

private void orderOfClosingResources () vyvolá Výnimku {try (AutoCloseableResourcesFirst af = new AutoCloseableResourcesFirst (); AutoCloseableResourcesSecond as = new AutoCloseableResourcesSecond ()) {af.doSomething (); as.doSomething (); }} 

Výkon:

Konštruktér -> AutoCloseableResources_First

Konštruktér -> AutoCloseableResources_Second

Niečo -> AutoCloseableResources_First

Niečo -> AutoCloseableResources_Second

Uzavreté AutoCloseableResources_Second

Uzavreté AutoCloseableResources_First

7. chytiť & konečne

A vyskúšajte zdroje blokovať stále môže mať chytiť a konečne blokov - ktoré budú fungovať rovnako ako tradičné skús blokovať.

8. Java 9: ​​Efektívne konečnéPremenné

Pred programom Java 9 sme mohli používať iba čerstvé premenné vo vnútri a vyskúšajte zdroje blok:

try (Scanner scanner = new Scanner (new File ("testRead.txt")); PrintWriter writer = new PrintWriter (new File ("testWrite.txt"))) {// omitted}

Ako je uvedené vyššie, pri deklarovaní viacerých zdrojov to bolo obzvlášť podrobné. Od Javy 9 a ako súčasť JEP 213, teraz môžeme použiť konečné alebo dokonca efektívne konečné premenné vo vnútri a vyskúšajte zdroje blokovať:

konečný skener skenera = nový skener (nový súbor ("testRead.txt")); Zapisovač PrintWriter = nový PrintWriter (nový súbor ("testWrite.txt")) try (skener; zapisovač) {// vynechaný}

Zjednodušene povedané, premenná je skutočne konečná, ak sa po prvom priradení nezmení, aj keď nie je výslovne označená ako konečné.

Ako je uvedené vyššie, skener je deklarovaná premenná konečné výslovne, takže ho môžeme použiť s vyskúšajte zdroje blokovať. Napriek tomu spisovateľka premenná nie je výslovne uvedená konečné, po prvom zadaní sa to nemení. Preto máme povolené používať spisovateľka premenná tiež.

9. Záver

V tomto článku sme diskutovali o tom, ako používať try-with-resources, ako nahradiť skús, chytiťa konečne pomocou zdrojov na vyskúšanie, vytváranie vlastných zdrojov pomocou Automatické uzatváranie a poradie, v akom sú zdroje uzavreté.

Kompletný zdrojový kód príklad je k dispozícii v tomto projekte GitHub.


$config[zx-auto] not found$config[zx-overlay] not found