English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
try-with-resources è un nuovo meccanismo di gestione delle eccezioni nel JDK 7, che rende facile chiudere le risorse utilizzate nel blocco try-catch. Si intende per risorsa (resource) l'oggetto che deve essere chiuso una volta completato il programma. La dichiarazione try-with-resources garantisce che ogni risorsa venga chiusa alla fine della dichiarazione. Tutte le classi che implementano l'interfaccia java.lang.AutoCloseable (che include tutte le classi che implementano java.io.Closeable) possono essere utilizzate come risorse.
La dichiarazione try-with-resources è stata migliorata nel JDK 9. Se hai già una risorsa che è final o equivalente a una variabile final, puoi utilizzarla nella dichiarazione try-with-resources senza dover dichiarare una nuova variabile nella dichiarazione try-with-resources.
import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; public class Tester { public static void main(String[] args) throws IOException { System.out.println(readData("test"));}} } static String readData(String message) throws IOException { Reader inputString = new StringReader(message); BufferedReader br = new BufferedReader(inputString); try (BufferedReader br1 = br) { return br1.readLine(); } } }
Il risultato dell'output è:
test
Nell'esempio sopra, dobbiamo dichiarare la risorsa br1 nel blocco try prima di essere in grado di utilizzarla.
In Java 9, non è necessario dichiarare la risorsa br1 per utilizzarla e ottenere lo stesso risultato.
import java.io.BufferedReader; import java.io.IOException; import java.io.Reader; import java.io.StringReader; public class Tester { public static void main(String[] args) throws IOException { System.out.println(readData("test"));}} } static String readData(String message) throws IOException { Reader inputString = new StringReader(message); BufferedReader br = new BufferedReader(inputString); try (br) { return br.readLine(); } } }
Il risultato dell'esecuzione è:
test
Quando si gestiscono risorse che devono essere chiuse, utilizzare la struttura try-with-resources invece di try-finally. Il codice generato è più conciso, più chiaro e genera eccezioni più utili. La struttura try-with-resources è più facile da scrivere e meno incline agli errori rispetto a quella try-finally, che in realtà è impossibile da utilizzare.