Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> Java

Multi-Exception Handling in Java meistern

Multi-Exception Handling in Java meistern

Entdecken Sie, wie Sie mehrere Exceptions mit einem einzigen catch-Block fangen, Ihren Code straffen und häufige Fallstricke vermeiden.

Vor Java 7 mussten Entwickler separate catch-Blöcke für jeden Exception-Typ schreiben, selbst wenn die Handling-Logik identisch war.

Betrachten Sie das folgende Szenario.

Beispiel 1: Getrennte catch-Blöcke

class Haupt { 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()); } } } 

Ausgabe:

/ by zero

In diesem Beispiel können zwei unterschiedliche Probleme auftreten:

Beide catch-Blöcke führen dieselbe Aktion aus, was zu dupliziertem Code führt.


Mehrere Exceptions in einem Block fangen

Seit Java SE 7 können Sie mehrere Exception-Typen in einem catch-Block mit dem Pipe-Separator (|) kombinieren.

Syntax:

try { // Code } catch (ExceptionType1 | ExceptionType2 ex) { // Handler } 

Beispiel 2: Multi-catch Block

class Haupt { 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()); } } } 

Ausgabe:

/ by zero

Durch das Zusammenführen der Handler wird der Code sauberer, der Bytecode kleiner und die Wartung einfacher.

Hinweis: In einem Multi-catch ist der Parameter implizit final, sodass Sie ihn nicht neu zuweisen können.


Basisklassen-Exception verwenden

Wenn mehrere gefangene Exceptions einen gemeinsamen Vorfahren teilen, können Sie diesen Vorfahren fangen, statt jede Unterklasse aufzulisten.

Beispiel 3: Basisklasse Exception fangen

class Haupt { public static void main(String[] args) { try { int[] array = new int[10]; array[10] = 30 / 0; } catch (Exception e) { System.out.println(e.getMessage()); } } } 

Ausgabe:

/ by zero

Da jede spezifische Exception in Java Exception erweitert, behandelt dieser einzelne catch-Block alle oben genannten Szenarien.


Wenn eine Basisklassen-Exception bereits gefangen wird, löst das Hinzufügen ihrer Unterklassen im selben catch einen Kompilierfehler aus.

Beispiel 4: Ungültige Kombination aus Basis- und Kind-Exceptions

class Haupt { 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()); } } } 

Ausgabe:

Main.java:6: error: Alternatives in a multi-catch statement cannot be related by subclassing

Dieser Fehler tritt auf, weil ArithmeticException und ArrayIndexOutOfBoundsException Unterklassen von Exception sind und somit die Sprachregel verletzen.

Java

  1. Java Operatoren meistern: Typen, Syntax und praktische Beispiele
  2. Java Kommentare: Typen, Verwendung und Best Practices
  3. Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
  4. Java Strings meistern: Erstellung, Methoden und Best Practices
  5. Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
  6. Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
  7. Java Exception Handling meistern: Try, Catch, Finally und Ressourcen
  8. Java throw vs. throws: Exception Handling mit praktischen Beispielen meistern
  9. Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
  10. Java Annotations erklärt: Typen, Platzierung und praktische Beispiele