LE ECCEZIONI IN JAVA
INTRODUZIONE
Un’eccezione è una condizione di errore che non viene rilevata a runtime, cioè durante l’esecuzione del programma. Un errore di questo tipo impedisce il corretto avanzamento del programma e richiede di essere gestito. Se l’eccezione non viene gestita il programma si interrompe. Introduciamo le classi base dalla quale tutte le eccezioni derivano. In Java tutte le eccezioni sono rappresentate da classi. Vediamo la figura.
Throwable che deriva da Object, significa sollevare, è la classe base di tutte le eccezioni. La differenza tra le due sottoclassi Exception ed Error è che Exception è la superclasse di tutte le eccezioni di tipo applicativo, gestibili programmaticamente come ad esempio la divisione per zero ,mentre Error è la superclasse delle eccezioni che riguardano la JVM, quando abbiamo eccezioni di questo tipo non vi è molto da fare per recuperare il problema.
UTILIZZARE I BLOCCHI TRY/CATCH
Con il blocco try/catch individuiamo delle aree dentro le quali potrebbero essere generate condizioni di errore. Vediamo come funziona.
Nel blocco try andiamo ad inserire le varie istruzioni che potrebbero causare un’eccezione, try significa prova ad eseguire le seguenti istruzioni. Se non ci sono errori tutti i blocchi catch vengono saltati e il programma continua normalmente. Viceversa, se si verifica un’eccezione questa può essere catturata all’interno di uno dei blocchi catch e gestita. Possiamo inserire handler differenti sulla base della tipologia di eccezione che si è verificata, i blocchi verranno presi in esame dall’alto verso il basso. All’interno delle parentesi tonde dobbiamo specificare un’eccezione che deriva da Throwable e una variabile. Se la classe corrisponde all’eccezione che è stata sollevata, allora verrà gestita in quel blocco catch. Vediamo un esempio per chiarire il tutto.
Nel casi di divisione per zero si avrà che l’eccezione viene catturata e viene mostrato un messaggio informativo, volendo possiamo riprendere il programma informando l’utente che ha inserito un numero non valido e ritornare con una istruzione return.
ERRATA CORRIGE y=0;
All’interno di un blocco catch possiamo inserire qualsiasi classe che deriva da Throwable, compresa Throwable stessa. Modifichiamo il codice e utilizziamo la classe Exception
Exception cattura tutte le proprie sottoclassi, questo potrebbe essere un bene o un male dipende quanto vogliamo essere precisi nel gestire le classi di eccezioni. Dobbiamo stare attenti a non mettere il blocco Exception primo di tutti, altrimenti se abbiamo eccezioni più specifiche che si trovano più in basso non verranno eseguite. La regola generale è che prima vanno messe le eccezioni più specifiche, ed infine il blocco Exception.
Vediamo in figura come possiamo catturare eccezioni sfruttando il Multi-catch.
ECCEZIONI NON CATTURATE
Che succede se viene sollevata un’eccezione che noi non catturiamo in quanto non abbiamo inserito un blocco try/catch? Vediamo un esempio.
Se provochiamo una divisione per zero senza blocchi try/catch il metodo corrente viene immediatamente abbandonato e si risale la cima dello stack per vedere se esiste un blocco in grado di gestire l’eccezione, nel nostro caso il codice salta nel main. Se l’eccezione viene gestita allora il programma continua altrimenti termina con un errore nel metodo main. Vediamo la figura.
LINK AI POST PRECEDENTI
LINK AL CODICE SU GITHUB
ESECUZIONE DEL CODICE DI ESEMPIO
- Scaricare il codice da GITHUB, lanciare il file JAR con il seguente comando in Visual Studio Code, posizionandosi nella directory contenente il JAR.
java -jar –enable-preview CorsoJava.jar
- Oppure mettere in esecuzione il main che si trova nel file CorsoJava.java.
Scrivi un commento