Gestione delle eccezioni Java
โก Riepilogo intelligente
Java La gestione delle eccezioni fornisce un meccanismo strutturato per gestire gli errori di runtime che interrompono il normale flusso del programma. Utilizza le parole chiave try, catch, finally, throw e throws per rilevare, isolare e recuperare da condizioni eccezionali, mantenendo al contempoping applicazioni robuste e prevedibili.

Che cos'รจ un'eccezione in Java?
An Eccezione nel Java รจ un evento che interrompe l'esecuzione delle istruzioni del programma e disturba il normale flusso di esecuzione del programma. ร un oggetto che incapsula le informazioni di un evento di errore verificatosi all'interno di un metodo e viene passato al sistema di runtime. JavaLe eccezioni vengono utilizzate principalmente per segnalare diversi tipi di condizioni di errore, in modo che gli sviluppatori possano gestirle in modo controllato.
Esistono due ampie categorie di errori in Java:
- Errori in fase di compilazione
- Errori di runtime
Gli errori in fase di compilazione possono essere ulteriormente classificati in due tipologie:
- Errori di sintassi
- Errori semantici
Esempio di errori di sintassi:
Invece di dichiarare int a; l'hai erroneamente dichiarato come in a;, per cui il compilatore genererร un errore.
Esempio di errori semantici: Hai dichiarato una variabile int a; e dopo alcune righe di codice dichiari nuovamente un numero intero come int a;Tutti questi errori vengono evidenziati quando compili il codice.
Esempio di errori di runtime
Un errore di runtime รจ definito come un EccezioneSi tratta di qualsiasi evento che interrompe il normale flusso di esecuzione del programma. Esempi di eccezioni includono eccezioni aritmetiche, NullPointerException, eccezioni di divisione per zero e molte altre. Eccezioni in Java sono condizioni che spesso esulano dal controllo diretto dello sviluppatore.
Clicchi Qui. se il video non รจ accessibile
Perchรฉ abbiamo bisogno della gestione delle eccezioni?
Supponiamo di aver scritto un programma per accedere a un server. Le cose funzionano bene durante lo sviluppo.ping il codice in un ambiente locale con condizioni controllate.
Durante un'effettiva esecuzione in produzione, il server potrebbe non essere disponibile. Quando il programma tenta di accedervi, viene generata un'eccezione e, senza un'adeguata gestione, il programma terminerร bruscamente.
Come gestire un'eccezione in Java
Finora abbiamo visto che un'eccezione รจ spesso al di fuori del controllo di uno sviluppatore. Tuttavia, attribuire il fallimento del codice a problemi ambientali non รจ una vera soluzione. ร necessaria una programmazione robusta che si occupi delle situazioni eccezionali. Tale codice รจ noto come Gestore delle eccezioni.
Nel nostro esempio, una buona gestione delle eccezioni significherebbe che, quando il server primario non รจ disponibile, il programma si connette automaticamente a un server di backup.
Per implementare ciรฒ, potresti scrivere del codice per connetterti al server utilizzando le tradizionali condizioni if โโed else. Controllerai se il server รจ inattivo e, in tal caso, scriverai del codice per connetterti al server di backup. Tale organizzazione del codice utilizzando rami "if" ed "else" non รจ efficace quando il tuo codice ha piรน Java eccezioni gestire.
class connect{ if(Server Up){ // code to connect to server } else{ // code to connect to BACKUP server } }
Prova Catch Block in Java
Java Fornisce un meccanismo integrato di gestione delle eccezioni che separa la logica normale dalla logica di ripristino degli errori.
- Il codice normale va in a TRY blocco.
- Il codice di gestione delle eccezioni va nel file CATCH blocco.
Nel nostro esempio, il blocco TRY conterrร il codice per connettersi al server. Il blocco CATCH conterrร il codice per connettersi al server di backup. Se il server รจ attivo, il codice nel blocco CATCH verrร ignorato. Se il server non รจ attivo, verrร generata un'eccezione e verrร eseguito il codice nel blocco CATCH.
Ecco come viene gestita un'eccezione in Java.
Sintassi per l'utilizzo di try e catch
try{ statement(s) } catch (exceptiontype name){ statement(s) }
Esempio di blocco Try Catch
Passo 1) Copiare il codice seguente in un editor.
class JavaException { public static void main(String args[]){ int d = 0; int n = 20; int fraction = n/d; System.out.println("End Of Main"); } }
Passo 2) Salva il file e compila il codice. Esegui il programma usando il comando java JavaEccezione.
Passo 3) Viene visualizzata un'eccezione aritmetica, divisione per zero, alla riga 5, e la riga 6 non viene mai eseguita.
Passo 4) Ora esaminiamo come try e catch ci aiuteranno a gestire questa eccezione. Metteremo la riga di codice che causa l'eccezione in un prova blocco, seguito da a prendere blocco. Copia il seguente codice nell'editor.
class JavaException { public static void main(String args[]) { int d = 0; int n = 20; try { int fraction = n / d; System.out.println("This line will not be Executed"); } catch (ArithmeticException e) { System.out.println("In the catch Block due to Exception = " + e); } System.out.println("End Of Main"); } }
Passo 5) Salva, compila ed esegui il codice. Otterrai il seguente output.
Come puoi osservare, l'eccezione viene gestita e viene eseguita anche l'ultima riga di codice. Inoltre, nota che la riga 7 non verrร eseguita perchรฉ non appena viene sollevata un'eccezione, il flusso di controllo passa al blocco catch.
Nota: L'oggetto ArithmeticException "e" contiene informazioni sull'eccezione che si รจ verificata, informazioni che possono essere utili per intraprendere azioni di ripristino.
Java Gerarchia delle classi di eccezione
Dopo l'esecuzione di un'istruzione catch, le altre vengono ignorate e l'esecuzione continua dopo il blocco try-catch. I blocchi catch annidati devono seguire la gerarchia delle eccezioni, dalla sottoclasse piรน specifica alla classe padre piรน generale.
- Tutte le classi di eccezioni in Java Estendi la classe Throwable. Throwable ha due sottoclassi, Error ed Exception.
- La classe Error definisce le eccezioni o i problemi che non dovrebbero verificarsi in circostanze normali nel programma, ad esempio, errori di memoria, errori hardware o errori della JVM.
- La classe Exception rappresenta le eccezioni che possono essere gestite dal programma, il quale puรฒ riprendersi da tali eccezioni utilizzando i blocchi try e catch.
- RuntimeException รจ una sottoclasse della classe Exception. Le eccezioni di questo tipo rappresentano eccezioni non controllate che si verificano in fase di esecuzione e non possono essere rilevate in fase di compilazione. Esempi tipici includono l'eccezione di divisione per zero e l'eccezione di puntatore nullo.
- L'eccezione IOException viene generata durante le operazioni di input e output.
- InterrottaEccezione in Java viene generato durante le operazioni multithread quando un thread viene interrotto.
Esempio: Annidamento di blocchi try e catch
Passo 1) Copiare il codice seguente in un editor.
class JavaException { public static void main(String args[]) { try { int d = 1; int n = 20; int fraction = n / d; int g[] = { 1 }; g[20] = 100; } /*catch(Exception e){ System.out.println("In the catch block due to Exception = "+e); }*/ catch (ArithmeticException e) { System.out.println("In the catch block due to Exception = " + e); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("In the catch block due to Exception = " + e); } System.out.println("End Of Main"); } }
Passo 2) Salva il file e compila il codice. Esegui il programma utilizzando il comando, Giava JavaEccezione.
Passo 3) Viene generata un'eccezione ArrayIndexOutOfBoundsException. Modifica il valore di int d a 0. Salva, compila ed esegui il codice.
Passo 4) Deve essere generata un'eccezione ArithmeticException.
Passo 5) Rimuovi il commento dalle righe 10 alla riga 12. Salva, compila ed esegui il codice.
Passaggio 6) Errore di compilazione? Questo accade perchรฉ Exception รจ la classe base di ArithmeticException. Qualsiasi eccezione sollevata da ArithmeticException puรฒ essere gestita anche dalla classe Exception. Pertanto, il blocco catch di ArithmeticException non avrร mai la possibilitร di essere eseguito, il che lo rende ridondante. Da qui l'errore di compilazione.
Java Infine Blocca
Il blocco finale รจ eseguito indipendentemente dal fatto che venga sollevata un'eccezione nel blocco try. ร opzionale Da utilizzare con un blocco try. Il blocco finally รจ il posto giusto per rilasciare risorse come connessioni al database, file o socket di rete.
try { statement(s) } catch (ExceptiontType name) { statement(s) } finally { statement(s) }
Se si verifica un'eccezione nel blocco try, il blocco finally viene eseguito dopo il completamento del blocco catch.
Esempio di blocco finally
Passo 1) Copiare il codice seguente in un editor.
class JavaException { public static void main(String args[]){ try{ int d = 0; int n =20; int fraction = n/d; } catch(ArithmeticException e){ System.out.println("In the catch block due to Exception = "+e); } finally{ System.out.println("Inside the finally block"); } } }
Passo 2) Salva, compila ed esegui il codice.
Passo 3) Risultato atteso: Il blocco finally viene eseguito anche se viene generata un'eccezione.
Passo 4) Modifica il valore della variabile d = 1. Salva, compila ed esegui il codice, e osserva l'output.
migliori pratiche per Java La gestione delle eccezioni
Seguire alcune regole collaudate ti aiuterร a mantenere il tuo Java Codice robusto, leggibile e facile da sottoporre a debug:
- Per preservare l'integritร della gerarchia delle eccezioni, รจ necessario intercettare prima le eccezioni piรน specifiche, poi quelle piรน generali.
- Evitate blocchi catch vuoti. Come minimo, registrate l'eccezione in modo che la causa principale non vada mai persa.
- Utilizzare il blocco finally o try con resources per rilasciare file, socket e connessioni al database.
- Genera eccezioni controllate solo quando il chiamante puรฒ ragionevolmente recuperare e utilizza le eccezioni non controllate per gli errori di programmazione.
- Incapsula le eccezioni di basso livello in un'eccezione aziendale significativa per mantenere la coerenza APItracts pulito.
- Nel codice multithread, non ignorare mai silenziosamente l'eccezione InterruptedException; ripristina invece il flag di interruzione.







