Java prova ... cattura (con esempi)

In questo tutorial, impareremo l'istruzione try catch in Java con l'aiuto di esempi.

Il try… catchblocco in Java viene utilizzato per gestire le eccezioni e impedisce la chiusura anomala del programma.

Ecco la sintassi di un try… catchblocco in Java.

 try( // code ) catch(exception) ( // code )

Il tryblocco include il codice che potrebbe generare un'eccezione.

Il catchblocco include il codice che viene eseguito quando si verifica un'eccezione all'interno del tryblocco.

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 tryblocco.

Quando il programma incontra questo codice, si ArithmeticExceptionverifica. Inoltre, l'eccezione viene rilevata dal catchblocco ed esegue il codice all'interno del catchblocco.

Il catchblocco viene eseguito solo se esiste un'eccezione all'interno del tryblocco.

Nota : in Java, possiamo usare un tryblocco senza un catchblocco. Tuttavia, non possiamo usare un catchblocco senza un tryblocco.

Java prova … finalmente blocca

Possiamo anche usare il tryblocco 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 tryblocco insieme al finallyblocco. Possiamo vedere che il codice all'interno del tryblocco sta causando un'eccezione.

Tuttavia, il codice all'interno del finallyblocco viene eseguito indipendentemente dall'eccezione.

Java prova … cattura … infine blocca

In Java, possiamo anche usare il blocco finalmente dopo il try… catchblocco. 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 è 5e 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 finallyblocco viene sempre eseguito, abbiamo incluso il codice per chiudere l' PrintWriterinterno 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 finallyblocco non viene eseguito:

  • Uso del System.exit()metodo
  • Si verifica un'eccezione nel finallyblocco
  • La morte di un filo

Blocchi multipli di cattura

Per ogni tryblocco possono esserci zero o più catchblocchi. Più catchblocchi ci consentono di gestire ogni eccezione in modo diverso.

Il tipo di argomento di ogni catchblocco 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 arrdi 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 IndexOutOfBoundExceptionverifica.

Quando si verifica un'eccezione nel tryblocco,

  • L'eccezione viene lanciata al primo catchblocco. Il primo catchblocco non gestisce un IndexOutOfBoundsException, quindi viene passato al catchblocco successivo .
  • Il secondo catchblocco nell'esempio precedente è il gestore di eccezioni appropriato perché gestisce un file IndexOutOfBoundsException. 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 catchblocco.

Ciò riduce la duplicazione del codice e aumenta la semplicità e l'efficienza del codice.

Ogni tipo di eccezione che può essere gestito dal catchblocco 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.

Articoli interessanti...