Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

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

  1. Java-operators beheersen: typen, syntax en praktische voorbeelden
  2. Java-commentaar: typen, gebruik en best practices
  3. Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
  4. Java Strings beheersen: aanmaken, methodes en best practices
  5. Java interfaces meesteren: concepten, implementatie en best practices
  6. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  7. Java Exception Handling meesteren: Try, Catch, Finally en Resources
  8. Java throw vs throws: Exception Handling meesteren met praktische voorbeelden
  9. Java Try-with-resources meesteren: automatische resource management uitgelegd
  10. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  11. Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid