English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Exception (Ausnahme) ist ein Problem, das während der Ausführung des Programms auftritt (Laufzeitfehler). Dies sind einige Beispielszenarien-
Wenn die Größe Ihres Arrays10wenn eine Zeile im Code versucht, auf das Element des Arrays zuzugreifen, das sich im11Ein Element.
Wenn Sie versuchen, eine Zahl durch 0 zu teilen (das Ergebnis ist unendlich, und die JVM weiß nicht, wie sie den Wert berechnen soll).
Wenn eine Ausnahme auftritt, wird das Programm an der Zeile, die die Ausnahme verursacht hat, plötzlich beendet, so dass der Rest des Programms nicht ausgeführt werden kann. Um dies zu verhindern, müssen Sie Ausnahmen behandeln.
Java gibt es zwei Arten von Ausnahmen.
Nicht überprüfte Ausnahmen - Nicht überprüfte Ausnahmen treten während der Ausführung auf und werden auch als Laufzeit-Ausnahmen bezeichnet. Dazu gehören Programmfehler, wie z.B. Logikfehler oder falsche API-Nutzung. Laufzeit-Ausnahmen werden während der Kompilierung ignoriert.
Überprüfte Ausnahmen - Überprüfte Ausnahmen treten während der Kompilierung auf und werden auch als Kompilierungszeit-Ausnahmen bezeichnet. Diese Ausnahmen können nicht einfach während der Kompilierung ignoriert werden. Der Programmierer sollte diese Ausnahmen (behandeln) beachten.
Um Ausnahmen zu behandeln, bietet Java den try-catch-Block-Mechanismus.
Um den Code, der möglicherweise Ausnahmen verursachen kann, umzugeben, wird ein try platziert / catch-Block. try / Der Code im catch-Block wird als geschützter Code bezeichnet.
try { // Geschützter Code } catch (ExceptionName e1) { // Catch-Block }
Wenn eine Ausnahme im try-Block ausgelöst wird, speichert die JVM die Ausnahme-Details im Ausnahme-Stack und führt den catch-Block fort, anstatt das Programm abzubrechen.
Ein catch-Anweisung bezieht sich auf die Deklaration des zu catchenden Ausnahme-Typs. Wenn eine Ausnahme im try-Block auftritt, wird überprüft, ob nach dem try ein catch-Block folgt.
Wenn die aufgetretene Ausnahmeart im catch-Block aufgeführt ist, wird die Ausnahme auf die gleiche Weise wie die Übermittlung von Parametern an Methodenparameter an den catch-Block weitergegeben.
import java.io.File; import java.io.FileInputStream; public class Test { public static void main(String args[]) { System.out.println("Hallo"); try{ File file = new File("my_file"); FileInputStream fis = new FileInputStream(file); } catch(Exception e){ System.out.println("Der angegebene Dateipfad wurde nicht gefunden"); } } }
Ausgaberesultat
Der angegebene Dateipfad wurde nicht gefunden
Wenn Sie eine Ausnahme im catch-Block cachen, können Sie sie mit dem throw-Schlüsselwort (verwendet, um ein Ausnahmeobjekt auszuwerfen) neu werfen.
Wiederholen Sie das Werfen von Ausnahmen, indem Sie die gleiche Ausnahme werfen, ohne sie anpassen zu müssen-
try { int result = (arr[a]);/(arr[b]); System.out.println("Ergebnis von ",+arr[a]+"/"+arr[b]+":+result); }catch(ArithmeticException e) { throw e; }
Oder umhüllen Sie die cacheden Ausnahmen in einer neuen Ausnahme und werfen Sie sie aus. Wenn Sie eine cacheden Ausnahme in einer anderen Ausnahme umhüllen und sie werfen, wird dies als Ausnahme-Linking oder Ausnahme-Wrapping bezeichnet. Durch dies können Sie Ihre Ausnahme anpassen und eine höhere Ebene der Ausnahme, die die Wartung der Abstraktion darstellt, werfen.
try { int result = (arr[a]);/(arr[b]); System.out.println("Ergebnis von ",+arr[a]+"/"+arr[b]+":+result); }catch(ArrayIndexOutOfBoundsException e) { throw new IndexOutOfBoundsException(); }
Im folgenden Java-Beispiel könnte der Code in demoMethod() ArrayIndexOutOfBoundsException und ArithmeticException auslösen. Wir fangen diese beiden Ausnahmen in zwei verschiedenen catch-Blöcken ab.
In dem catch-Block werfen wir zwei Ausnahmen, indem wir höhere Ausnahmen umhüllen, und die andere wird direkt geworfen.
import java.util.Arrays; import java.util.Scanner; public class RethrowExample { public void demoMethod() { Scanner sc = new Scanner(System.in); int[] arr = {10, 20, 30, 2, 0, 8}; System.out.println("Array: ",+Arrays.toString(arr)); System.out.println("Wählen Sie den Nenner und den Zähler (nicht 0) aus diesem Array (Geben Sie Positionen 0 bis 5); int a = sc.nextInt(); int b = sc.nextInt(); try { int result = (arr[a]);/(arr[b]); System.out.println("Ergebnis von ",+arr[a]+"/"+arr[b]+":+result); }catch(ArrayIndexOutOfBoundsException e) { throw new IndexOutOfBoundsException(); }catch(ArithmeticException e) { throw e; } } public static void main(String [] args) { new RethrowExample().demoMethod(); } }
Ausgaberesultat
Array: [10, 20, 30, 2, 0, 8] Choose numerator and denominator(not 0) from this array (enter positions 0 to 5) 0 4 Exception in thread "main" java.lang.ArithmeticException: / by zero at myPackage.RethrowExample.demoMethod(RethrowExample.java:16) at myPackage.RethrowExample.main(RethrowExample.java:25)
Ausgaberesultat
Array: [10, 20, 30, 2, 0, 8] Choose numerator and denominator(not 0) from this array (enter positions 0 to 5) 124 5 Exception in thread "main" java.lang.IndexOutOfBoundsException at myPackage.RethrowExample.demoMethod(RethrowExample.java:17) at myPackage.RethrowExample.main(RethrowExample.java:23)