In questo tutorial, impareremo l'istruzione try catch in Java con l'aiuto di esempi.
Il try… catch
blocco in Java viene utilizzato per gestire le eccezioni e impedisce la chiusura anomala del programma.
Ecco la sintassi di un try… catch
blocco in Java.
try( // code ) catch(exception) ( // code )
Il try
blocco include il codice che potrebbe generare un'eccezione.
Il catch
blocco include il codice che viene eseguito quando si verifica un'eccezione all'interno del try
blocco.
Esempio: Java prova … cattura blocco
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )
Produzione
ArithmeticException => / per zero
Nell'esempio sopra, nota la linea,
int divideByZero = 5 / 0;
Qui stiamo cercando di dividere un numero per zero . In questo caso, si verifica un'eccezione. Quindi, abbiamo racchiuso questo codice all'interno del try
blocco.
Quando il programma incontra questo codice, si ArithmeticException
verifica. Inoltre, l'eccezione viene rilevata dal catch
blocco ed esegue il codice all'interno del catch
blocco.
Il catch
blocco viene eseguito solo se esiste un'eccezione all'interno del try
blocco.
Nota : in Java, possiamo usare un try
blocco senza un catch
blocco. Tuttavia, non possiamo usare un catch
blocco senza un try
blocco.
Java prova … finalmente blocca
Possiamo anche usare il try
blocco insieme a un blocco finalmente.
In questo caso, il blocco finalmente viene sempre eseguito indipendentemente dal fatto che ci sia o meno un'eccezione all'interno del blocco try.
Esempio: Java prova … finalmente blocca
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Produzione
Infine il blocco viene sempre eseguito Eccezione nel thread "main" java.lang.ArithmeticException: / per zero su Main.main (Main.java:4)
Nell'esempio sopra, abbiamo usato il try
blocco insieme al finally
blocco. Possiamo vedere che il codice all'interno del try
blocco sta causando un'eccezione.
Tuttavia, il codice all'interno del finally
blocco viene eseguito indipendentemente dall'eccezione.
Java prova … cattura … infine blocca
In Java, possiamo anche usare il blocco finalmente dopo il try… catch
blocco. Per esempio,
import java.io.*; class ListOfNumbers ( // create an integer array private int() list = (5, 6, 8, 9, 2); // method to write data from array to a fila public void writeList() ( PrintWriter out = null; try ( System.out.println("Entering try statement"); // creating a new file OutputFile.txt out = new PrintWriter(new FileWriter("OutputFile.txt")); // writing values from list array to Output.txt for (int i = 0; i <7; i++) ( out.println("Value at: " + i + " = " + list(i)); ) ) catch (Exception e) ( System.out.println("Exception => " + e.getMessage()); ) finally ( // checking if PrintWriter has been opened if (out != null) ( System.out.println("Closing PrintWriter"); // close PrintWriter out.close(); ) else ( System.out.println("PrintWriter not open"); ) ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Produzione
Immissione dell'istruzione try Eccezione => Indice 5 fuori dai limiti per la lunghezza 5 Chiusura di PrintWriter
Nell'esempio precedente, abbiamo creato un array denominato list e un file denominato output.txt. Qui stiamo cercando di leggere i dati dall'array e di archiviarli nel file.
Notare il codice,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Qui, la dimensione dell'array è 5
e l'ultimo elemento dell'array è a list(4)
. Tuttavia, stiamo cercando di accedere agli elementi in a(5)
e a(6)
.
Pertanto, il codice genera un'eccezione che viene rilevata dal blocco catch.
Poiché il finally
blocco viene sempre eseguito, abbiamo incluso il codice per chiudere l' PrintWriter
interno del blocco finalmente.
È buona norma utilizzare il blocco finale per includere un codice di pulizia importante come la chiusura di un file o una connessione.
Nota : ci sono alcuni casi in cui un finally
blocco non viene eseguito:
- Uso del
System.exit()
metodo - Si verifica un'eccezione nel
finally
blocco - La morte di un filo
Blocchi multipli di cattura
Per ogni try
blocco possono esserci zero o più catch
blocchi. Più catch
blocchi ci consentono di gestire ogni eccezione in modo diverso.
Il tipo di argomento di ogni catch
blocco indica il tipo di eccezione che può essere gestita da esso. Per esempio,
class ListOfNumbers ( public int() arr = new int(10); public void writeList() ( try ( arr(10) = 11; ) catch (NumberFormatException e1) ( System.out.println("NumberFormatException => " + e1.getMessage()); ) catch (IndexOutOfBoundsException e2) ( System.out.println("IndexOutOfBoundsException => " + e2.getMessage()); ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Produzione
IndexOutOfBoundsException => Indice 10 fuori dai limiti per la lunghezza 10
In questo esempio, abbiamo creato un array intero denominato arr
di dimensione 10 .
Poiché l'indice dell'array inizia da 0 , l'ultimo elemento dell'array è in arr(9)
. Notare la dichiarazione,
arr(10) = 11;
Qui stiamo cercando di assegnare un valore all'indice 10 . Quindi, si IndexOutOfBoundException
verifica.
Quando si verifica un'eccezione nel try
blocco,
- L'eccezione viene lanciata al primo
catch
blocco. Il primocatch
blocco non gestisce unIndexOutOfBoundsException
, quindi viene passato alcatch
blocco successivo . - Il secondo
catch
blocco nell'esempio precedente è il gestore di eccezioni appropriato perché gestisce un fileIndexOutOfBoundsException
. Quindi, viene eseguito.
Cattura di più eccezioni
Da Java SE 7 e versioni successive, ora possiamo rilevare più di un tipo di eccezione con un catch
blocco.
Ciò riduce la duplicazione del codice e aumenta la semplicità e l'efficienza del codice.
Ogni tipo di eccezione che può essere gestito dal catch
blocco viene separato mediante una barra verticale |
.
La sua sintassi è:
try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )
Per saperne di più, visita Java che rileva più eccezioni.
Dichiarazione di prova con risorse di Java
L' istruzione try-with-resources è un'istruzione try che ha una o più dichiarazioni di risorse.
La sua sintassi è:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
La risorsa è un oggetto da chiudere alla fine del programma. Deve essere dichiarato e inizializzato nell'istruzione try.
Facciamo un esempio.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
L' istruzione try-with-resources viene anche definita gestione automatica delle risorse . Questa istruzione chiude automaticamente tutte le risorse alla fine dell'istruzione.
Per saperne di più, visita la dichiarazione java try-with-resources.