โ˜• Lezione 11

Gestione delle Eccezioni - Gestire gli Errori

Eccezioni: Gestire Situazioni Anomale

๐ŸŽฏ Obiettivi

๐Ÿ’ก 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

FACILE

Crea una calcolatrice che gestisce divisione per zero

Esercizio 2: Validazione Input

MEDIO

Metodo 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