Java fängt mehrere Ausnahmen ab
Java fängt mehrere Ausnahmen ab
In diesem Tutorial lernen wir anhand von Beispielen, mehrere Ausnahmen in Java zu behandeln.
Vor Java 7 mussten wir mehrere Ausnahmebehandlungscodes für verschiedene Arten von Ausnahmen schreiben, selbst wenn es Coderedundanz gab.
Nehmen wir ein Beispiel.
Beispiel 1:Mehrere catch-Blö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());
}
}
}
Ausgabe
/ by zero
In diesem Beispiel können zwei Ausnahmen auftreten:
ArithmeticExceptionweil wir versuchen, eine Zahl durch 0 zu teilen.ArrayIndexOutOfBoundsExceptionweil wir ein neues Integer-Array mit den Array-Grenzen 0 bis 9 deklariert haben und versuchen, dem Index 10 einen Wert zuzuweisen.
Wir drucken die Ausnahmemeldung sowohl in catch Blöcke, d.h. doppelter Code.
Die Assoziativität des Zuweisungsoperators = ist von rechts nach links, also ein ArithmeticException wird zuerst mit der Nachricht
/ by zero
geworfen .
Mehrere Ausnahmen in einem Catch-Block behandeln
In Java SE 7 und höher können wir jetzt mehr als einen Ausnahmetyp in einem einzigen catch abfangen blockieren.
Jeder Ausnahmetyp, der von catch behandelt werden kann Block wird durch einen senkrechten Strich oder senkrechten Strich | getrennt .
Seine Syntax ist:
try {
// code
} catch (ExceptionType1 | Exceptiontype2 ex) {
// catch block
}
Beispiel 2:Multi-Catch-Block
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());
}
}
}
Ausgabe
/ by zero
Abfangen mehrerer Ausnahmen in einem einzigen catch Block reduziert die Code-Duplizierung und erhöht die Effizienz.
Der beim Kompilieren dieses Programms generierte Bytecode ist kleiner als das Programm mit mehreren catch Blöcke, da es keine Coderedundanz gibt.
Hinweis: Wenn ein catch block behandelt mehrere Ausnahmen, der catch-Parameter ist implizit final . Das bedeutet, dass wir Catch-Parametern keine Werte zuweisen können.
Basisausnahme abfangen
Beim Abfangen mehrerer Ausnahmen in einem einzigen catch Block wird die Regel auf spezialisiert verallgemeinert.
Das heißt, wenn es eine Hierarchie von Ausnahmen im catch gibt -Block können wir nur die Basisausnahme abfangen, anstatt mehrere spezialisierte Ausnahmen abzufangen.
Nehmen wir ein Beispiel.
Beispiel 3:Nur Basis-Ausnahmeklasse abfangen
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());
}
}
}
Ausgabe
/ by zero
Wir wissen, dass alle Ausnahmeklassen Unterklassen von Exception sind Klasse. Anstatt also mehrere spezialisierte Ausnahmen abzufangen, können wir einfach Exception abfangen Klasse.
Wenn die Basisausnahmeklasse bereits in catch angegeben wurde verwenden Sie keine untergeordneten Ausnahmeklassen im selben catch Block. Andernfalls erhalten wir einen Kompilierungsfehler.
Nehmen wir ein Beispiel.
Beispiel 4:Abfangen von Basis- und untergeordneten Ausnahmeklassen
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());
}
}
}
Ausgabe
Main.java:6: error: Alternatives in a multi-catch statement cannot be related by subclassing
In diesem Beispiel ArithmeticException und ArrayIndexOutOfBoundsException sind beide Unterklassen von Exception Klasse. Wir erhalten also einen Kompilierungsfehler.
Java