Esistono due tipi di eccezioni: eccezione controllata e eccezione deselezionata. In questa guida, li discuteremo. La differenza principale tra eccezione selezionata e deselezionata è che le eccezioni controllate vengono controllate in fase di compilazione mentre le eccezioni deselezionate vengono controllate in fase di runtime.
Quali sono le eccezioni controllate?
Le eccezioni controllate vengono controllate in fase di compilazione., Significa che se un metodo sta lanciando un’eccezione selezionata, dovrebbe gestire l’eccezione usando il blocco try-catch o dovrebbe dichiarare l’eccezione usando la parola chiave throws, altrimenti il programma darà un errore di compilazione.
Consente di capire questo con l’aiuto di un esempio:
Checked Exception Example
In questo esempio stiamo leggendo il filemyfile.txt
e visualizzando il suo contenuto sullo schermo. In questo programma ci sono tre posti in cui viene generata un’eccezione selezionata come menzionato nei commenti qui sotto., FileInputStream che viene utilizzato per specificare il percorso del file e il nome, genera FileNotFoundException
. Il metodo read() che legge il contenuto del file genera IOException
e il metodo close () che chiude il flusso di input del file genera anche IOException
.
Output:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: Unhandled exception type FileNotFoundExceptionUnhandled exception type IOExceptionUnhandled exception type IOException
Perché questo errore di compilazione? Come ho detto all’inizio, le eccezioni controllate vengono controllate durante la compilazione. Poiché non abbiamo gestito / dichiarato le eccezioni, il nostro programma ha dato l’errore di compilazione.
Come risolvere l’errore?, Ci sono due modi per evitare questo errore. Vedremo entrambi i modi uno per uno.
Metodo 1: Dichiarare l’eccezione usando la parola chiave throws.
Poiché sappiamo che tutte e tre le occorrenze delle eccezioni controllate sono all’interno del metodo main (), un modo per evitare l’errore di compilazione è: Dichiarare l’eccezione nel metodo usando la parola chiave throws. Potresti pensare che il nostro codice stia lanciando FileNotFoundException e IOException entrambi quindi perché stiamo dichiarando solo IOException. Il motivo è che IOException è una classe padre di FileNotFoundException, quindi per impostazione predefinita lo copre., Se vuoi puoi dichiararli in questo modo public static void main(String args) throws IOException, FileNotFoundException
.
Output:
Il contenuto del file viene visualizzato sullo schermo.
Metodo 2: gestirli usando i blocchi try-catch.
L’approccio che abbiamo usato sopra non è affatto buono. Non è la migliore pratica di gestione delle eccezioni. Dovresti dare un messaggio significativo per ogni tipo di eccezione in modo che sia facile per qualcuno capire l’errore. Il codice dovrebbe essere così:
Questo codice verrà eseguito correttamente e visualizzerà il contenuto del file.,
Qui ci sono alcune altre Eccezioni selezionate –
SQLException
IOException
ClassNotFoundException
InvocationTargetException
Quali sono le eccezioni Unchecked?
Le eccezioni deselezionate non vengono controllate in fase di compilazione. Significa che se il tuo programma sta lanciando un’eccezione non selezionata e anche se non hai gestito/dichiarato quell’eccezione, il programma non darà un errore di compilazione. La maggior parte delle volte queste eccezioni si verificano a causa dei dati errati forniti dall’utente durante l’interazione utente-programma., Spetta al programmatore giudicare in anticipo le condizioni, che possono causare tali eccezioni e gestirle in modo appropriato. Tutte le eccezioni non selezionate sono sottoclassi dirette della classe RuntimeException.
Consente di capire questo con un esempio:
Esempio di eccezione deselezionata
Se si compila questo codice, si compilerà correttamente tuttavia quando lo si eseguirà, genereràArithmeticException
. Ciò dimostra chiaramente che le eccezioni non controllate non vengono controllate in fase di compilazione, si verificano in fase di runtime. Vediamo un altro esempio.,
Anche questo codice viene compilato correttamente poiché ArrayIndexOutOfBoundsException
è anche un’eccezione non controllata.
Nota: ciò non significa che il compilatore non stia controllando queste eccezioni, quindi non dovremmo gestirle. In realtà dovremmo gestirli con più attenzione. Ad esempio, nell’esempio precedente dovrebbe esserci un messaggio di eccezione per l’utente che sta tentando di visualizzare un valore che non esiste nell’array in modo che l’utente sia in grado di correggere il problema.,
Output:
The specified index does not exist in array. Please correct the error.
Here are the few unchecked exception classes:
NullPointerException
ArrayIndexOutOfBoundsException
ArithmeticException
IllegalArgumentException
NumberFormatException