Uitzonderingen (exceptions) zijn een mechanisme voor het omgaan met fouten in Java. Elk object dat wordt opgegooid is een afgeleide klasse van Throwable. Er zijn twee hoofdcategorieën:
Exception, behalve RuntimeException): moeten expliciet worden afgehandeld of gedeclareerd in de methodehandtekening met throws.RuntimeException): hoeven niet expliciet te worden afgehandeld, kunnen op elke plek optreden (bijvoorbeeld, NullPointerException).Wanneer te gebruiken?
public void readFile(String path) throws IOException { // Checked exception — vereist afhandeling Files.readAllLines(Paths.get(path)); } public void divide(int a, int b) { int c = a / b; // Unchecked — ArithmeticException }
Kan een methode die geen throws verklaart, een checked exception gooien?
Antwoord: Nee, de compiler staat niet toe dat checked exception wordt gegooid zonder het te verklaren in de methodehandtekening (throws). Maar unchecked exception kan zonder waarschuwing worden gegooid.
void foo() { throw new IOException(); // Compilatiefout }
Verhaal
In een internetbank besloot de opdrachtgever de afhandeling van
SQLExceptionste negeren door gebruik te maken van unchecked wrappers. Hierdoor leidde een driverupdate tot onzichtbare fouten die gegevenssynchronisatie veroorzaakten.
Verhaal
In de loggingapplicatie bleef het logbestand geblokkeerd door een niet-afgevangen checked exception (
FileNotFoundException), die "verloren" was geraakt in de oproepketen, de fout werd niet op tijd afgehandeld, en de applicatie kon niet meer naar de logs schrijven.
Verhaal
In het handelsplatform implementeerde het team een globale catch(Throwable) om "nooit te crashen". Hierdoor werden kritieke unchecked exceptions gemaskeerd — de applicatie bleef werken in een inconsistente toestand, wat leidde tot ingewikkelde bugs en dataverlies.