Nel tutorial, impareremo i diversi approcci alla gestione delle eccezioni in Java con l'aiuto di esempi.
Nell'ultimo tutorial, abbiamo appreso delle eccezioni Java. Sappiamo che le eccezioni interrompono in modo anomalo l'esecuzione di un programma.
Questo è il motivo per cui è importante gestire le eccezioni. Ecco un elenco di diversi approcci per gestire le eccezioni in Java.
- prova … cattura il blocco
- finalmente bloccare
- lancia e lancia la parola chiave
1. Java prova … cattura blocco
Il blocco try-catch viene utilizzato per gestire le eccezioni in Java. Ecco la sintassi del try… catch
blocco:
try ( // code ) catch(Exception e) ( // code )
Qui abbiamo inserito il codice che potrebbe generare un'eccezione all'interno del try
blocco. Ogni try
blocco è seguito da un catch
blocco.
Quando si verifica un'eccezione, viene rilevata dal catch
blocco. Il catch
blocco non può essere utilizzato senza il try
blocco.
Esempio: gestione delle eccezioni utilizzando try… catch
class Main ( public static void main(String() args) ( try ( // code that generate exception 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, stiamo cercando di dividere un numero per 0
. Qui, questo codice genera un'eccezione.
Per gestire l'eccezione, abbiamo inserito il codice, 5 / 0
all'interno del try
blocco. Ora, quando si verifica un'eccezione, il resto del codice all'interno del try
blocco viene ignorato.
Il catch
blocco cattura l'eccezione e le istruzioni all'interno del blocco catch vengono eseguite.
Se nessuna delle istruzioni nel try
blocco genera un'eccezione, il catch
blocco viene saltato.
2. Java finalmente si blocca
In Java, il finally
blocco viene sempre eseguito indipendentemente dal fatto che ci sia o meno un'eccezione.
Il finally
blocco è facoltativo. E, per ogni try
blocco, può esserci un solo finally
blocco.
La sintassi di base del finally
blocco è:
try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )
Se si verifica un'eccezione, il finally
blocco viene eseguito dopo il try… catch
blocco. Altrimenti, viene eseguito dopo il blocco try. Per ogni try
blocco, può esserci un solo finally
blocco.
Esempio: gestione delle eccezioni Java utilizzando il blocco finale
class Main ( public static void main(String() args) ( try ( // code that generates exception int divideByZero = 5 / 0; ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) finally ( System.out.println("This is the finally block"); ) ) )
Produzione
ArithmeticException => / by zero Questo è il blocco finale
Nell'esempio sopra, stiamo dividendo un numero per 0 all'interno del try
blocco. Qui, questo codice genera un file ArithmeticException
.
L'eccezione viene rilevata dal catch
blocco. E poi il finally
blocco viene eseguito.
Nota : è buona norma utilizzare il finally
blocco. È perché può includere importanti codici di pulizia come,
- codice che potrebbe essere saltato accidentalmente da return, continue o break
- chiusura di un file o di una connessione
3. Java lancia e lancia la parola chiave
La throw
parola chiave Java viene utilizzata per generare esplicitamente una singola eccezione.
Quando facciamo throw
un'eccezione, il flusso del programma si sposta dal try
blocco al catch
blocco.
Esempio: gestione delle eccezioni tramite lancio Java
class Main ( public static void divideByZero() ( // throw an exception throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )
Produzione
Eccezione nel thread "main" java.lang.ArithmeticException: tentativo di dividere per 0 in Main.divideByZero (Main.java:5) in Main.main (Main.java:9)
Nell'esempio precedente, lanciamo esplicitamente ArithmeticException
la throw
parola chiave using .
Allo stesso modo, la throws
parola chiave viene utilizzata per dichiarare il tipo di eccezioni che potrebbero verificarsi all'interno del metodo. Viene utilizzato nella dichiarazione del metodo.
Esempio: Java lancia la parola chiave
import java.io.*; class Main ( // declareing the type of exception public static void findFile() throws IOException ( // code that may generate IOException File newFile = new File("test.txt"); FileInputStream stream = new FileInputStream(newFile); ) public static void main(String() args) ( try ( findFile(); ) catch (IOException e) ( System.out.println(e); ) ) )
Produzione
java.io.FileNotFoundException: test.txt (Il sistema non riesce a trovare il file specificato)
Quando eseguiamo questo programma, se il file test.txt non esiste, FileInputStream
lancia un FileNotFoundException
che estende la IOException
classe.
Il findFile()
metodo specifica che IOException
può essere lanciato un. Il main()
metodo chiama questo metodo e gestisce l'eccezione se viene lanciata.
Se un metodo non gestisce le eccezioni, il tipo di eccezioni che possono verificarsi al suo interno deve essere specificato nella throws
clausola.
Per saperne di più, visita Java lancia e lancia.