Eccezioni: Gestire Situazioni Anomale
๐ฏ Obiettivi
- Capire cosa sono le eccezioni
- Usare try-catch-finally
- Tipi di eccezioni in Java
- Lanciare eccezioni con throw
- Creare eccezioni personalizzate
๐ก Cos'รจ un'Eccezione?
Un'eccezione รจ un evento anomalo che interrompe il normale flusso del programma.
Esempi: divisione per zero, file non trovato, array fuori bounds, etc.
๐ Try-Catch Base
public class EsempioEccezione {
public static void main(String[] args) {
try {
// Codice che potrebbe generare un'eccezione
int risultato = 10 / 0; // Divisione per zero!
System.out.println("Risultato: " + risultato);
} catch (ArithmeticException e) {
// Gestisco l'eccezione
System.out.println("Errore: divisione per zero!");
System.out.println("Messaggio: " + e.getMessage());
}
System.out.println("Programma continua...");
}
}
Errore: divisione per zero!
Messaggio: / by zero
Programma continua...
๐ Try-Catch-Finally
public class TestFile {
public static void main(String[] args) {
try {
int[] numeri = {1, 2, 3};
System.out.println(numeri[5]); // Fuori dai limiti!
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Indice non valido!");
} finally {
// Eseguito SEMPRE, anche se c'รจ un'eccezione
System.out.println("Blocco finally eseguito");
}
System.out.println("Fine programma");
}
}
โ ๏ธ Eccezioni Comuni
| Eccezione | Quando si verifica |
|---|---|
| NullPointerException | Uso di oggetto null |
| ArrayIndexOutOfBoundsException | Indice array non valido |
| ArithmeticException | Operazione matematica illegale |
| NumberFormatException | Conversione stringa-numero fallita |
| FileNotFoundException | File non trovato |
๐จ Catch Multipli
public class MultiCatch {
public static void main(String[] args) {
String input = "abc";
try {
int numero = Integer.parseInt(input);
int risultato = 100 / numero;
System.out.println("Risultato: " + risultato);
} catch (NumberFormatException e) {
System.out.println("Formato numero non valido!");
} catch (ArithmeticException e) {
System.out.println("Divisione per zero!");
} catch (Exception e) {
// Catch generico alla fine
System.out.println("Errore generico: " + e.getMessage());
}
}
}
๐ Lanciare Eccezioni
public class ContoBancario {
private double saldo;
public ContoBancario(double saldoIniziale) {
if (saldoIniziale < 0) {
throw new IllegalArgumentException("Saldo iniziale negativo!");
}
this.saldo = saldoIniziale;
}
public void preleva(double importo) throws Exception {
if (importo > saldo) {
throw new Exception("Fondi insufficienti!");
}
saldo -= importo;
}
}
// Uso
try {
ContoBancario conto = new ContoBancario(100);
conto.preleva(150);
} catch (Exception e) {
System.out.println("Errore: " + e.getMessage());
}
โ๏ธ Esercizi
Esercizio 1: Calcolatrice Sicura
FACILECrea una calcolatrice che gestisce divisione per zero
Esercizio 2: Validazione Input
MEDIOMetodo che verifica etร (0-120) e lancia eccezione se invalida
๐ฏ Concetti Chiave
- try-catch per gestire eccezioni
- finally eseguito sempre
- throw per lanciare eccezioni
- throws nella firma del metodo
- Gestisci eccezioni specifiche prima di quelle generiche