La Gestione delle Eccezioni in Java

Durante la scrittura di un programma proviamo più volte a compilarlo e poi eseguirlo, cercando di perfezionarlo per non incorrere in brutte figure. Quando tutto ci sembra funzionare a dovere, qualcuno inserisce un valore anomalo e la JVM ci lancia un messaggio poco confortevole: “Arithmetic Exception” perché abbiamo cercato di dividere un numero per zero.
Con il termine eccezione si indica un evento che si manifesta in seguito al verificarsi di un errore. Lo scopo dello scatenarsi dell’eccezione è per non far terminare in modo anomalo il programma ed inoltre permette di essere intercettata e mostrare un messaggio personalizzato. Vediamo un esempio:

// file Main.java

package corso;

public class Main
{
    public static int Divisione(int a, int b)
    {
       return a / b;
    }

    public static void main(String[] args)
    {
       System.out.println("La divisione di 50 con 0 è " +
              Divisione(50, 0));
    }
}

Se provate ad eseguire il programma verrà lanciata un’eccezione gestita dalla macchina virtuale Java che vi avverte della divisione per zero. Possiamo superare il problema inserendo una nostra gestione dell’errore, intercettandolo quando avviene prima di essere passato alla JVM. Vediamo la sintassi:

// file Main.java

package corso;

public class Main
{
    public static int Divisione(int a, int b)
    {
       try
       {
         a /= b;
       }
       catch(ArithmeticException e)
       {
         a = 0;
       }

       return a;
   }

   public static void main(String[] args)
   {
        System.out.println("La divisione di 50 con 0 è " +
             Divisione(50, 0));
   }
}

Con il try proviamo a fare un’operazione, mentre con il catch gestiamo la possibile eccezione che viene lanciata, quindi una divisione per zero per noi dà sempre come risultato zero. Vediamo un altro esempio:

// file Main.java

package corso;

public class Main
{
   public static int Fattoriale(int a)
   {
      if (a <= 1)
        System.out.println("Inserire un valore
              maggiore di " + a + "\n");

      int iTot = 1;
      try
      {
          for (int i = a; i > 1; i--)
             iTot *= i;
      }
      catch(Exception e)
      {
          iTot = 0;
      }
      finally
      {
          if (iTot == 0)
             System.out.println("Inserire
                un numero minore di " + a + "\n");
      }

      return iTot;
    }

    public static void main(String[] args)
    {
	System.out.println("Il fattoriale di 50 è " +
            Fattoriale(50));
    }
}

In questo esempio ho inserito la parola chiave finally che delinea una parte di codice che viene sempre eseguita. In lezioni future impareremo a creare nostre eccezioni personalizzate, basta creare una classe derivata da Exception, che ancora non sappiamo fare e quindi studieremo questo argomento dopo che abbiamo imparato a capire cosa sono le classi derivate.

<< Lezione Precedente – Inizio CorsoLezione Successiva >>

Pubblicato
Categorie: Java

Di Giampaolo Rossi

Sviluppatore software da oltre 16 anni.