|
Java è un linguaggio fortemente tipato:
molti errori sono individuati dal compilatore (sintassi,
tipi, restituzione
di valori), ma non tutti...
Si possono verificare varie situazioni impreviste o anomale durante l'esecuzione di un programma (tipicamente dati errati in input, errori di programmazione, ma anche guasti) che possono causarne la brutale interruzione (fallimento). Un programma ben scritto dovrebbe prevedere tali eventualità inserendo delle istruzioni per individuare le anomalie e ripristinare una situazione corretta. In Java abbiamo a disposizione un meccanismo di gestione delle eccezioni che è:
|
|
Accesso ad un elemento inesistente di un array [OutOfBounds]:
Si tratta di un errore di programmazione: correggere il "<=" in "<" nella guardia del secondo for. Questo errore potrebbe (anzi dovrebbe) essere evitato dal programmatore! Ma non può essere segnalato dal compilatore. |
|
Divisione per zero [DivideByZero] (si fornisca 0 come input):
Si tratta spesso di mancanza di controlli sull'input dell'utente, indice di codice poco robusto. Curiosità: se si dichiara
x
di tipo double nel programma di sopra, e si fornisce in
input 0, non viene segnalato un errore ma viene restituita una costante
speciale. Infatti le operazioni tra valori in virgola mobile non lanciano
eccezioni perché sono conformi allo standard IEEE 754. (Provate
a vedere come viene valutata l'espressione 0.0/0). |
|
Invocazione di un metodo su una variabile il cui
valore è null [NullPointer]:
|
|
Fallimento di un cast: a tempo
di esecuzione, una variabile non è legata a un oggetto del tipo
dichiarato [ClassCast]:
|
|
Fallimento dovuto ad un formato non corretto
durante la conversione di una stringa in intero (la lettera "O" è
stata digitata al posto della cifra "0") [NumberFormat]:
|
|
|