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.

  • โš ๏ธ Eccezione definita: Un'eccezione รจ un evento di runtime che interrompe la sequenza di esecuzione standard ed รจ rappresentata come un oggetto che descrive la condizione di errore.
  • ๐Ÿงฏ Prova Catch Block: Inserite il codice a rischio all'interno di un blocco try e fatelo seguire da uno o piรน blocchi catch per gestire in modo efficace specifici tipi di eccezione.
  • ๐Ÿ” Infine, il comportamento: Il blocco finally viene sempre eseguito dopo try e catch, il che lo rende ideale per chiudere file, socket o rilasciare altre risorse di sistema.
  • โœ… Gerarchia delle eccezioni: Tutte le eccezioni ereditano da Throwable, che si ramifica in Error ed Exception, con RuntimeException che gestisce i casi non controllati come la divisione per zero.
  • ๐Ÿงช migliori pratiche: Cattura prima l'eccezione piรน specifica, evita blocchi catch vuoti, registra messaggi significativi e usa piรน blocchi catch per mantenere il codice conciso e manutenibile.

Gestione delle eccezioni Java

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:

  1. Errori in fase di compilazione
  2. 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.

Java La gestione delle eccezioni

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.

Java La gestione delle eccezioni

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.

Java La gestione delle eccezioni

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.

  1. Il codice normale va in a TRY blocco.
  2. Il codice di gestione delle eccezioni va nel file CATCH blocco.

Prova Cattura 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.

Prova Cattura Blocco

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.

Prova Cattura Blocco

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.

Java Gerarchia delle eccezioni

  • 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.

DOMANDE FREQUENTI

Le eccezioni controllate vengono verificate in fase di compilazione e devono essere dichiarate o intercettate, come ad esempio IOException. Le eccezioni non controllate estendono RuntimeException, si verificano in fase di esecuzione e non richiedono una gestione obbligatoria, come ad esempio NullPointerException o ArithmeticException.

Il blocco finally viene sempre eseguito dopo i blocchi try e catch, indipendentemente dal fatto che si sia verificata un'eccezione o meno. รˆ il punto piรน sicuro per rilasciare risorse come handle di file, connessioni al database o socket, garantendo una terminazione pulita delle operazioni.

La parola chiave `throw` viene utilizzata all'interno di un metodo per sollevare effettivamente un oggetto eccezione, mentre `throws` viene utilizzata nella firma di un metodo per dichiarare che il metodo puรฒ passare determinate eccezioni controllate al chiamante per la gestione.

Sรฌ. Un blocco try puรฒ essere seguito da un blocco finally senza alcun blocco catch. Questo schema viene utilizzato quando lo sviluppatore vuole garantire che il codice di pulizia venga eseguito anche se l'eccezione stessa viene propagata al chiamante.

Sรฌ. Gli strumenti di osservabilitร  basati sull'IA analizzano lo stack traces, log e percorsi del codice per prevedere dove รจ probabile che si verifichino eccezioni di runtime. Suggeriscono controlli difensivi, raccomandano il posizionamento di catch e mettono in superficie anomalie, aiutanoping I team prevengono i crash prima che raggiungano l'ambiente di produzione.

Gli assistenti IA analizzano lo stack traces, li correlano con il codice sorgente e suggeriscono probabili cause principali e relative soluzioni. Generano modelli try-catch, raccomandano miglioramenti alla registrazione e persino riscrivono metodi difettosi, riducendo drasticamente il tempo che gli sviluppatori dedicano alla diagnosi Java eccezioni.

Riassumi questo post con: