Le eccezioni (exceptions) sono un meccanismo per la gestione degli errori in Java. Ogni oggetto sollevato è una classe derivata da Throwable. Ci sono due categorie principali:
Exception, escluse RuntimeException): devono essere gestite esplicitamente o dichiarate nella firma del metodo tramite throws.RuntimeException): non è richiesto gestirle esplicitamente, possono verificarsi in qualsiasi punto (ad esempio, NullPointerException).Quando usare?
public void readFile(String path) throws IOException { // Checked exception — richiede gestione Files.readAllLines(Paths.get(path)); } public void divide(int a, int b) { int c = a / b; // Unchecked — ArithmeticException }
Un metodo che non dichiara throws può sollevare un checked exception?
Risposta: No, il compilatore non consentirà di sollevare un checked exception senza dichiarazione nella firma del metodo (throws). Tuttavia, un unchecked exception può essere sollevato senza alcun avviso.
void foo() { throw new IOException(); // Errore di compilazione }
Storia
In una banca online, il cliente ha deciso di ignorare la gestione delle
SQLExceptions, usando wrapper unchecked. A causa di ciò, durante l'aggiornamento del driver, errori invisibili hanno portato alla dissincronizzazione dei dati.
Storia
In un'applicazione di logging, il file di log rimaneva bloccato a causa di un checked exception non gestito (
FileNotFoundException), che è stato "perso" nella catena di chiamate; l'errore non è stato gestito in tempo, e l'applicazione non è più riuscita a scrivere nei log.
Storia
In una piattaforma commerciale, il team ha implementato un catch globale (Throwable) per "non cadere mai". Di conseguenza, le eccezioni unchecked critiche venivano mascherate — l'applicazione continuava a funzionare in uno stato incoerente, portando a bug complessi e perdita di dati.