JavaRush /Java-Blog /Random-DE /Ausnahmen und ihre Handhabung
articles
Level 15

Ausnahmen und ihre Handhabung

Veröffentlicht in der Gruppe Random-DE
Ausnahmen oder Ausnahmesituationen (Zustände) sind Fehler, die in einem Programm während seines Betriebs auftreten. Alle Ausnahmen in Java sind Objekte. Daher können sie nicht nur automatisch generiert werden, wenn eine Ausnahmesituation eintritt, sondern auch vom Entwickler selbst erstellt werden. Hierarchie der Ausnahmeklassen: Ausnahmen und deren Handhabung – 1Ausnahmen sind in mehrere Klassen unterteilt, aber alle haben einen gemeinsamen Vorfahren – die Klasse Throwable. Seine Nachkommen sind die Unterklassen Exceptionund Error. Ausnahmen ( Exceptions) sind das Ergebnis von Problemen in einem Programm, die grundsätzlich lösbar und vorhersehbar sind. Beispielsweise kam es bei ganzen Zahlen zu einer Division durch Null. Fehler ( Errors) sind schwerwiegendere Probleme, die in der Java-Spezifikation angegeben sind und die Sie nicht versuchen sollten, in Ihrem eigenen Programm zu behandeln, da es sich um Probleme auf JVM-Ebene handelt. Ausnahmen dieser Art treten beispielsweise auf, wenn der für die virtuelle Maschine verfügbare Speicher erschöpft ist. Das Programm ist weiterhin nicht in der Lage, zusätzlichen Speicher für die JVM bereitzustellen. In Java werden alle Ausnahmen in drei Typen unterteilt: geprüfte Ausnahmen ( checked) und ungeprüfte Ausnahmen ( unchecked), zu denen Fehler ( Errors) und Laufzeitausnahmen ( RuntimeExceptionsKlassennachkomme Exception) gehören. Kontrollierte Ausnahmen sind Fehler, die in einem Programm behandelt werden können und sollten; alle Nachkommen einer Klasse Exception(außer RuntimeException) gehören zu diesem Typ. Die Ausnahmebehandlung kann über Operatoren erfolgen try…catchoder in den externen Teil des Programms übertragen werden. Beispielsweise kann eine Methode Ausnahmen weitergeben, die in ihr weiter oben in der Aufrufhierarchie auftreten, ohne sie selbst zu behandeln. Ungeprüfte Ausnahmen müssen nicht behandelt werden, aber Sie können Klassenausnahmen behandeln, wenn Sie möchten RuntimeException. Lassen Sie uns das folgende Programm kompilieren und ausführen:
class Main {
     public static void main(String[] args) {
         int a = 4;
         System.out.println(a/0);
     }
}
Beim Start wird die folgende Meldung auf der Konsole angezeigt:
Exception in thread "main" java.lang.ArithmeticException: / by zero
        at Main.main(Main.java:4)
Die Meldung zeigt die Klasse der aufgetretenen Ausnahme an – ArithmeticException. Diese Ausnahme kann behandelt werden:
class Main {
     public static void main(String[] args) {
         int a = 4;
         try {
              System.out.println(a/0);
         } catch (ArithmeticException e) {
              System.out.println("Произошла недопустимая арифметическая операция");
         }
     }
}
Anstelle einer Standardfehlermeldung wird nun ein Block ausgeführt catch, dessen Parameter das Objekt e der Klasse ist, die der Ausnahme entspricht (dem Objekt selbst kann ein beliebiger Name gegeben werden, es wird benötigt, wenn wir es erzwingen wollen). (Diese Ausnahme erneut ausführen, z. B. damit sie von einem anderen Handler überprüft wird.) In diesem Fall enthält der Block trydas Fragment des Programms, bei dem möglicherweise eine Ausnahme auftreten könnte. Einer trykann mehreren Catch-Blöcken mit unterschiedlichen Ausnahmeklassen entsprechen.
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
     int[] m = {-1,0,1};
        Scanner sc = new Scanner(System.in);
        try {
            int a = sc.nextInt();
            m[a] = 4/a;
            System.out.println(m[a]);
        } catch (ArithmeticException e) {
            System.out.println("Произошла недопустимая арифметическая операция");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Обращение по недопустимому индексу массива");
        }
    }
}
Wenn der Benutzer nach dem Start des angezeigten Programms über Tastatur 1 oder 2 eingibt, wird das Programm ausgeführt, ohne dass Ausnahmen entstehen. Wenn der Benutzer 0 eingibt, tritt eine Ausnahme der Klasse auf ArithmeticExceptionund wird vom ersten Block behandelt catch. Wenn der Benutzer 3 eingibt, tritt eine Klassenausnahme auf ArrayIndexOutOfBoundsException(Array außerhalb der Grenzen) und wird vom zweiten Block verarbeitet catch. Wenn der Benutzer eine nicht ganzzahlige Zahl eingibt, zum Beispiel 3,14, kommt es zu einer Klassenausnahme InputMismatchException(Nichtübereinstimmung des Eingabetyps) und diese wird im Standardfehlerformat ausgegeben, da wir sie in keiner Weise behandelt haben. Sie können jedoch einen Handler für die Klasse hinzufügen Exception, da diese Klasse die übergeordnete Klasse für alle anderen geprüften Ausnahmen ist und alle Ausnahmen (einschließlich ) abfängt InputMismatchException.
import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        int[] m = {-1,0,1};
        int a = 1;
        Scanner sc = new Scanner(System.in);
        try {
            a = sc.nextInt();
            m[a-1] = 4/a;
            System.out.println(m[a]);
        } catch (ArithmeticException e) {
            System.out.println("Произошла недопустимая арифметическая операция");
        } catch (ArrayIndexOutOfBoundsException e) {
            System.out.println("Обращение по недопустимому индексу массива");
        } catch (Exception e) {
            System.out.println("Произошло ещё Wieое-то исключение");
        }
    }
}
Da Ausnahmen auf einer Hierarchie von Klassen und Unterklassen aufbauen, sollten Sie zunächst versuchen, spezifischere Ausnahmen zu behandeln und erst dann allgemeinere. Das heißt, wenn wir den Block mit der Klassenausnahmebehandlung an erster Stelle (und nicht an dritter Stelle) platzieren würden Exception, würden wir niemals andere Fehlermeldungen als „Eine andere Ausnahme ist aufgetreten“ sehen (alle Ausnahmen würden sofort von diesem Block abgefangen und würden die nicht erreichen). ausruhen). Eine optionale Ergänzung zu Blöcken try…catchkann ein Block sein finally. Die darin platzierten Befehle werden in jedem Fall ausgeführt, unabhängig davon, ob eine Ausnahme auftritt oder nicht. Trotz der Tatsache, dass beim Auftreten einer nicht behandelten Ausnahme der nach der Generierung dieser Ausnahme verbleibende Teil des Programms nicht ausgeführt wird. Wenn beispielsweise bei längeren Berechnungen eine Ausnahme aufgetreten ist, finallykönnen Sie Zwischenergebnisse in einem Block anzeigen oder speichern. Link zur Quelle: Ausnahmen und deren Behandlung
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION