back to top

Gestire le eccezioni in Java: il blocco try-catch

La gestione delle eccezioni รจ un aspetto fondamentale della programmazione in Java. Utilizzando il costrutto try-catch, gli sviluppatori possono controllare gli errori in modo efficace, consentendo alle applicazioni di continuare a funzionare anche quando si verificano situazioni impreviste.

Il Costrutto Try-Catch

Entriamo subito nel vivo della trattazione per quanto riguarda il costrutto try e catch. Nel blocco try deve essere inserito il codice che potrebbe generare unโ€™eccezione, mentre nel blocco catch viene gestita lโ€™eccezione. Ad esempio, si potrebbe stampare a video un messaggio che notifichi allโ€™utente che si รจ verificato un errore. Vediamo ora un esempio pratico utilizzando la classe Implementazione:

Pubblicitร 
public class Implementazione {

  public static void main(String args[]) {
    
    int divisione;
    
    OperazioniSuNumeri operazioni = new OperazioniSuNumeri();
    
    try {
      divisione = operazioni.divisione(5,0);
      System.out.println("Il risultato della divisione รจ:" + divisione);
    }
    catch (Exception exc) {
      System.out.println(exc);
      System.out.println("Non puoi effettuare una divisione per zero");
    }
    
    System.out.println("Ho terminato comunque l'esecuzione del programma"); 
  } 
}

Nel codice sopra, il metodo divisione, che puรฒ generare unโ€™eccezione, รจ stato inserito allโ€™interno del blocco try. Se il metodo non solleva unโ€™eccezione, il programma procederร  alla stampa del risultato della divisione; in caso contrario, verrร  eseguito il codice contenuto nel blocco catch.

Analisi della Sintassi di Catch

Andiamo a esaminare la sintassi di catch (Exception exc). Questo costrutto รจ composto dalla parola chiave catch seguita da un parametro, exc, di tipo Exception. Tale variabile contiene il messaggio di errore dellโ€™eccezione sollevata. Se eseguiamo la classe Implementazione, a video otterremo il seguente output:

java.lang.ArithmeticException: / by zero
Non puoi effettuare una divisione per zero
Ho terminato comunque l'esecuzione del programma

La prima riga rappresenta la stampa relativa alla variabile exc, la seconda il nostro messaggio di errore e la terza la conferma che lโ€™applicazione ha terminato la sua esecuzione. Questo รจ importante: gestendo lโ€™eccezione, abbiamo garantito che lโ€™applicazione possa completare lโ€™esecuzione correttamente, evitando una terminazione prematura. Anche utilizzando Exception come parametro nel blocco catch, cattureremo qualsiasi eccezione, comprese quelle sollevate dalla JVM.

Buone Pratiche nella Gestione delle Eccezioni

รˆ sempre consigliabile gestire le eccezioni in modo piรน granulare, prevedendo blocchi catch dedicati per specifiche eccezioni. Vediamo un modo per migliorare la nostra classe Implementazione:

try {
 divisione = operazioni.divisione(5,0);
 System.out.println("Il risultato della divisione รจ:" + divisione);
}
catch (ArithmeticException exc) {
  System.out.println(exc);
  System.out.println("Non puoi effettuare una divisione per zero");
}
catch (Exception exc) {
  System.out.println("Errore generico");
}

Con questa struttura, quando viene generata unโ€™eccezione, la JVM controllerร  i vari blocchi catch. Solo il blocco corrispondente al tipo di eccezione generata verrร  eseguito. Se, ad esempio, viene generata unโ€™eccezione di tipo AritmeticException, verrร  eseguito il codice del primo blocco catch. Se invece si verifica unโ€™eccezione di altro tipo, la JVM passerร  al secondo blocco catch.

Lโ€™ordine dei blocchi catch รจ fondamentale: devono essere scritti dal meno generale al piรน generale. Se invertissimo lโ€™ordine, lโ€™eccezione verrebbe catturata dal blocco piรน generico Exception, saltando il blocco specifico per AritmeticException. Questa separazione consente al programmatore di identificare immediatamente la causa del problema e il punto nel codice in cui รจ avvenuto.

Pubblicitร