Java lancia e lancia la parola chiave

In questo tutorial, impareremo a usare la parola chiave throw e throws per la gestione delle eccezioni con l'aiuto di esempi.

In Java, le eccezioni possono essere classificate in due tipi:

  • Eccezioni unchecked: Essi non vengono controllati al momento della compilazione, ma a run-tempo.Per esempio ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, eccezioni sotto Errordi classe, ecc
  • Eccezioni verificate: vengono verificate in fase di compilazione. Ad esempio, IOException, InterruptedException, etc.

Fare riferimento a Eccezioni Java per informazioni dettagliate sulle eccezioni selezionate e non selezionate.

Di solito, non è necessario gestire eccezioni non controllate. È perché si verificano eccezioni non controllate a causa di errori di programmazione. Ed è una buona pratica correggerli invece di gestirli.

Questo tutorial si concentrerà ora su come gestire le eccezioni verificate utilizzando throwe throws.

Java lancia la parola chiave

Usiamo la throwsparola chiave nella dichiarazione del metodo per dichiarare il tipo di eccezioni che potrebbero verificarsi al suo interno.

La sua sintassi è:

 accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code ) 

Come puoi vedere dalla sintassi sopra, possiamo usare throwsper dichiarare più eccezioni.

Esempio 1: Java genera Keyword

 import java.io.*; class Main ( public static void findFile() throws IOException ( // code that may produce 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 (nessun file o directory di questo tipo) 

Quando eseguiamo questo programma, se il file test.txtnon esiste, FileInputStreamlancia un FileNotFoundExceptionche estende la IOExceptionclasse.

Se un metodo non gestisce le eccezioni, il tipo di eccezioni che possono verificarsi al suo interno deve essere specificato nella throwsclausola in modo che i metodi più in alto nello stack di chiamate possano gestirle o specificarle utilizzando la throwsparola chiave stessa.

Il findFile()metodo specifica che IOExceptionpuò essere lanciato un. Il main()metodo chiama questo metodo e gestisce l'eccezione se viene lanciata.

Lanciare più eccezioni

Ecco come possiamo generare più eccezioni utilizzando la throwsparola chiave.

 import java.io.*; class Main ( public static void findFile() throws NullPointerException, IOException, InvalidClassException ( // code that may produce NullPointerException… … … // code that may produce IOException… … … // code that may produce InvalidClassException… … … ) public static void main(String() args) ( try( findFile(); ) catch(IOException e1)( System.out.println(e1.getMessage()); ) catch(InvalidClassException e2)( System.out.println(e2.getMessage()); ) ) ) 

Qui, il findFile()metodo di specifica che può gettare NullPointerException, IOExceptione InvalidClassExceptionnella sua throwsclausola.

Nota che non abbiamo gestito il file NullPointerException. Questo perché si tratta di un'eccezione non controllata. Non è necessario specificarlo nella throwsclausola e gestirlo.

lancia la parola chiave vs. prova … cattura … finalmente

Potrebbero esserci diversi metodi che possono causare eccezioni. Scrivere try… catchper ogni metodo sarà noioso e il codice diventerà lungo e meno leggibile.

throws è utile anche quando hai controllato un'eccezione (un'eccezione che deve essere gestita) che non vuoi catturare nel tuo metodo corrente.

Parola chiave Java throw

La throwparola chiave viene utilizzata per generare in modo esplicito una singola eccezione.

Quando viene generata un'eccezione, il flusso di esecuzione del programma viene trasferito dal tryblocco al catchblocco. Usiamo la throwparola chiave all'interno di un metodo.

La sua sintassi è:

 throw throwableObject;

Un oggetto lanciabile è un'istanza di classe Throwableo sottoclasse della Throwableclasse.

Esempio 2: parola chiave lancio Java

 class Main ( public static void divideByZero() ( 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:3) in Main.main (Main.java:7) exit status 1 

In questo esempio, lanciamo esplicitamente un file ArithmeticException.

Nota: ArithmeticException è un'eccezione non controllata. Di solito non è necessario gestire le eccezioni non controllate.

Esempio 3: lancio di un'eccezione controllata

 import java.io.*; class Main ( public static void findFile() throws IOException ( throw new IOException("File not found"); ) public static void main(String() args) ( try ( findFile(); System.out.println("Rest of code in try block"); ) catch (IOException e) ( System.out.println(e.getMessage()); ) ) ) 

Produzione

 File non trovato 

Il findFile()metodo genera un IOExceptioncon il messaggio che abbiamo passato al suo costruttore.

Si noti che poiché si tratta di un'eccezione controllata, è necessario specificarla nella throwsclausola.

I metodi che chiamano questo findFile()metodo devono gestire questa eccezione o specificarla utilizzando la throwsparola chiave stessa.

Abbiamo gestito questa eccezione nel main()metodo. Il flusso di esecuzione del programma viene trasferito dal tryblocco al catchblocco quando viene generata un'eccezione. Quindi, il resto del codice nel tryblocco viene saltato e le istruzioni nel catchblocco vengono eseguite.

Articoli interessanti...