English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java Grund教程

Java Flow Control

Java Array

Java Object-Oriented (I)

Java Object-Oriented (II)

Java Object-Oriented (III)

Java Ausnahmebehandlung

Java List (List)

Java Queue (Queue)

Java Map Collection

Java Set Collection

Java Input Output (I/O)

Java Reader/Writer

Java Other Topics

Java Catch and Handle Multiple Exceptions

In this tutorial, we will learn how to handle multiple exceptions in Java with examples.

In Java 7Zuvor mussten wir, selbst wenn es Code-Redundanz gab, mehrere Ausnahmebehandlungscode für verschiedene Arten von Ausnahmen schreiben.

Lassen Sie uns ein Beispiel nennen.

Beispiel1:Mehrere Fangblöcke

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

Ausgaberesultat

/ von zero

In diesem Beispiel könnten zwei Ausnahmen auftreten:

  • ArithmeticException -  weil wir versucht haben, eine Zahl durch 0 zu teilen.

  • ArrayIndexOutOfBoundsException -  da wir bereits eine neue Ganzzahlarray deklariert haben, das Arraylimit von 0 bis9und wir versuchen, den Index10einer Wert zugewiesen.

Wir drucken in beiden catch-Blöcken die Ausnahmemeldung aus, was wiederholten Code bedeutet.

Das Verknüpfungsoperator (=) hat eine Assoziativität von rechts nach links, daher wird ArithmeticException zunächst mit der Nachricht / von zero aus geworfen.

Mehrere Ausnahmen im catch-Block behandeln

In Java SE 7In Versionen und höher, können wir jetzt mehrere Arten von Ausnahmen in einem einzigen catch-Block fangen.

Jede Ausnahmeart, die von einem catch-Block behandelt werden kann, wird durch einen vertikalen Strich (|) getrennt.

Die Syntax ist:

try {
  // Code
} catch (ExceptionType1 | Ausnahmeart2 ex) { 
  // catch-Block
}

Beispiel2:Mehrere Ausnahmen in einem einzigen catch-Block fangen

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

Ausgaberesultat

/ von zero

Das Fangen mehrerer Ausnahmen in einem einzigen catch-Block kann die Kodierredundanz verringern und die Effizienz erhöhen.

Der Bytecode, der beim Kompilieren des Programms generiert wird, ist kleiner als der eines Programms mit mehreren catch-Blöcken, da es keine Code-Redundanz gibt.

Hinweis:Wenn ein catch-Block mehrere Ausnahmen behandelt, ist der catch-Parameter implizit final. Das bedeutet, dass wir keine Werte zu dem Parameter zuweisen können.

Grundlegende Ausnahme fangen

Wenn mehrere Ausnahmen in einem einzelnen catch-Block gefangen werden, wird diese Regel auf die Spezialisierungsregel generalisiert.

Das bedeutet, wenn es eine Ausnahmehierarchie im catch-Block gibt, können wir nur grundlegende Ausnahmen fangen und nicht mehrere spezifische Ausnahmen fangen.

Lassen Sie uns ein Beispiel nennen.

Beispiel3:Nur grundlegende Ausnahmearten fangen

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

Ausgaberesultat

/ von zero

Wir wissen, dass alle Ausnahmearten Unterklassen der Exception-Klasse sind. Daher müssen wir nicht mehrere spezifische Ausnahmen fangen, sondern nur die Exception-Klasse fangen.

Wenn Sie bereits eine grundlegende Ausnahmeart in einem catch-Block angegeben haben, verwenden Sie keine Unterexceptionart in diesem catch-Block. Andernfalls erhalten wir einen Compilerfehler.

Lassen Sie uns ein Beispiel nennen.

Beispiel4Kapturenbasis- und Unterklassenexceptionen

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

Ausgaberesultat

Main.java:6: Fehler: Alternativen in einem mehrfachen-catch-Anweisung kann nicht durch Vererbung verbunden werden

In diesem Beispiel sind ArithmeticException und ArrayIndexOutOfBoundsException beide Subklassen der Exception-Klasse. Daher werfen wir einen Kompilierungsfehler aus.