Multi-exception handling in Java meesteren
Multi-exception handling in Java meesteren
Ontdek hoe je meerdere exceptions met een enkel catch blok kunt vangen, je code stroomlijnt, en veelvoorkomende valkuilen vermijdt.
Voor Java 7 moesten ontwikkelaars afzonderlijke catch blokken schrijven voor elk exception type, zelfs als de handling logica identiek was.
Overweeg het volgende scenario.
Voorbeeld 1: Afzonderlijke catch blokken
class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (ArithmeticException e) { System.out.println(e.getMessage()); } catch (ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } }
Uitvoer
/ by zero
In dit voorbeeld kunnen twee verschillende problemen ontstaan:
ArithmeticException– deling door nul.ArrayIndexOutOfBoundsException– index 10 benaderen in een 10-element array.
Beide catch blokken voeren dezelfde actie uit, wat leidt tot gedupliceerde code.
Meerdere exceptions in een enkel blok vangen
Sinds Java SE 7 kun je meerdere exception typen combineren in één catch blok met de pipe (|) separator.
Syntax:
try { // code } catch (ExceptionType1 | ExceptionType2 ex) { // handler }
Voorbeeld 2: Multi-catch blok
class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } }
Uitvoer
/ by zero
Door de handlers te mergen, is de code schoner, de bytecode kleiner, en onderhoud makkelijker.
Let op: In een multi-catch is de parameter impliciet final, dus je kunt hem niet re-assignen.
Een basisextentie klasse gebruiken
Als verschillende gevangen exceptions een gemeenschappelijke voorouder delen, kun je die voorouder vangen in plaats van elke subklasse op te sommen.
Voorbeeld 3: De basisklasse Exception vangen
class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (Exception e) { System.out.println(e.getMessage()); } } }
Uitvoer
/ by zero
Omdat elke specifieke exception in Java Exception extends, handelt deze enkele catch blok alle bovenstaande scenario's af.
Als een basisextentie al gevangen is, zal het includeren van zijn subklassen in dezelfde catch een compilatiefout triggeren.
Voorbeeld 4: Ongeldige combinatie van basis en child exceptions
class Main { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (Exception | ArithmeticException | ArrayIndexOutOfBoundsException e) { System.out.println(e.getMessage()); } } }
Uitvoer
Main.java:6: error: Alternatives in a multi-catch statement cannot be related by subclassing
Deze fout treedt op omdat ArithmeticException en ArrayIndexOutOfBoundsException subklassen zijn van Exception, wat de taalregel schendt.
Java
- Java-operators beheersen: typen, syntax en praktische voorbeelden
- Java-commentaar: typen, gebruik en best practices
- Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
- Java Strings beheersen: aanmaken, methodes en best practices
- Java interfaces meesteren: concepten, implementatie en best practices
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Exception Handling meesteren: Try, Catch, Finally en Resources
- Java throw vs throws: Exception Handling meesteren met praktische voorbeelden
- Java Try-with-resources meesteren: automatische resource management uitgelegd
- Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
- Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid