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-resourcesper 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 |