back to top

Gestione delle eccezioni in Java

Abbiamo finito la nostra carrellata sulla programmazione ad oggetti e abbiamo visto, tramite del codice di esempio, alcune implementazioni in Java. A questo punto della guida, il lettore ha tutte le basi per poter strutturare applicazioni, anche di grosse dimensioni, con un approccio ingegneristico. Chiaramente, forniti i mezzi, il lettore dovrà fare esperienza pratica per poter padroneggiare al meglio tutti le varie tecniche discusse in questa guida.

Andiamo adesso a parlare di un mezzo molto potente che il java ci mette a disposizione: le eccezioni.

Le eccezioni

Una eccezione, in un programma, è una sorta di evento che non era stato previsto che genera un errore e anche la terminazione prematura dell’applicazione stessa. Bisogna fare una differenza tra eccezione ed errore, in quanto, quando si parla di un errore di un’applicazione, si parla di un errore commesso dallo sviluppatore nella scrittura del codice. Per capirci immaginiamo di riprendere la nostra classe "OperazioniSuNumeri" e di implementarvi la divisione tra due numeri interi. La scrittura del codice del metodo che effettua la divisione è banale, ma, a causa di un input particolare da parte dell’utente si arriverà ad una situazione di errore. Vediamo cosa succede, per esempio, se effettuiamo una divisione per zero:

public class OperazioniSuNumeri {
  public int divisione(int x, int y) {
    return x/y;
  }
}

L’mplementazione sarà la seguente:

public class Implementazione {

  public static void main(String args[]) {
    int divisione;
    OperazioniSuNumeri operazioni = new OperazioniSuNumeri();
    divisione = operazioni.divisione(5,0);
    System.out.println("Il risultato della divisione è:" + divisione);
  }
}

Se eseguiamo la classe, dopo averla compilata, otterremo il seguente messaggio di errore:

Exception in thread "main" java.lang.ArithmeticException: / by zero
at OperazioniSuNumeri.divisione(OperazioniSuNumeri.java:6)
at Implementazione.main(Implementazione.java:9)

Come possiamo vedere dal messaggio di errore è presente la parola chiave Exception, ovvero la JMV ci comunica che durante l’esecuzione dell’applicazione è stata sollevata un’eccezione. Le informazioni che ci vengono fornite sono numerose ed in questo caso permettono di capire immediatamente il pezzo di codice che a generato l’eccezione in quanto ci viene comunicato che l’eccezione è un ArithmeticException e addirittura il tipo / by zero. Dato che questa eccezione non è stata gestita, l’applicazione si è chiusa inaspettatamente prima di terminare l’intero flusso di codice (infatti non è arrivata ad eseguire la riga di codice che stampa a video il risultato).

Se però, per esempio, siamo interessati ad estendere la classe "OperazionIsuNumeri" implementando la somma, sottrazione, moltiplicazione e la divisione tra due numeri sarebbe gradevole che il programma calcolasse correttamente somma, sottrazione, moltiplicazione ed, in caso il secondo numero sia zero, dovrebbe mostrare all’utente un messaggio del tipo "la divisione per zero non può essere effettuata". Per fare ciò andremo a gestire l’eccezione consentendo all’applicazione di continuare ad eseguire le istruzioni sottostanti senza terminare prematuramente.

Nel nostro caso potevamo risolvere il nostro problema di divisione per zero, senza nemmeno accennare al concetto di eccezione in quanto bastava fare un banale controllo sul divisore per controllare che fosse diverso zero. In situazioni più complesse, però non è possibile evitare che l’applicazione generi un’eccezione con un semplice if.

Infatti nel caso in cui volessi creare un’applicativo client/server avremo necessità di creare una socket tra il client e il server. Ciò può essere effettuato richiamando il costruttore della classe ServerSocket, la quale, quando si tenta di istanziarla, può generare un IOException causata dal fatto che magari il server non ha più porte disponibile per gestire altre connessioni. Chiaramente questa problematica non può essere gestita dal programmatore con un semplice if, ma è necessario catturare l’eventuale eccezione sollevata e poter agire di conseguenza. In java ciò viene eseguito sfruttando le parole chiave try e catch.

Nella prossima lezione vedremo un esempio pratico su come gestire le eccezioni.

Pubblicitร