Sobes.tech
Junior
185

Come lanciare correttamente le eccezioni in Java?

Risposta dell'AI

sobes.tech AI

Le eccezioni devono essere sollevate quando si verifica una situazione anomala che interrompe l'esecuzione normale del programma e richiede un trattamento immediato.

Principi fondamentali:

  • Utilizzare le eccezioni per segnalare errori, non per controllare il flusso di esecuzione.
  • Scegliere il tipo di eccezione più appropriato dalla libreria standard.
  • Creare proprie classi di eccezioni quando quelle standard non forniscono informazioni sufficienti.
  • Includere nel messaggio di eccezione dettagli sulla causa dell'errore, incluso il contesto.
  • Non catturare eccezioni che non si possono gestire correttamente. È meglio propagare queste eccezioni verso l'alto nello stack di chiamate.
  • Usare blocchi try-with-resources per chiudere automaticamente le risorse.
  • Registrare le eccezioni che si gestiscono o si propagano a un livello superiore.

Sintassi corretta: throw new MyException("Messaggio di errore");

Esempio:

// Creazione di una propria eccezione
public class InvalidParameterException extends Exception {
    public InvalidParameterException(String message) {
        super(message);
    }
}

// Metodo che solleva un'eccezione
public int divide(int a, int b) throws InvalidParameterException {
    if (b == 0) {
        throw new InvalidParameterException("Divisione per zero non consentita");
    }
    return a / b;
}

// Uso del metodo e gestione dell'eccezione
public void performDivision(int x, int y) {
    try {
        int result = divide(x, y);
        System.out.println("Risultato: " + result);
    } catch (InvalidParameterException e) {
        // Log dell'errore
        System.err.println("Errore durante la divisione: " + e.getMessage());
        // Eventuale ulteriore gestione o propagazione
    }
}

Differenze tra eccezioni Checked e Unchecked:

Tipo di eccezione Eredita da Richiede gestione/dichiarazione Esempio
Checked Exception (eccetto RuntimeException) Sì (try-catch o throws) IOException, SQLException
Unchecked RuntimeException No (il compilatore non lo richiede) NullPointerException, ArrayIndexOutOfBoundsException