Der Inhalt dieses Artikels soll Ihnen vorstellen, was eine Java-Ausnahme ist. Wie werden Java-Ausnahmen behandelt? Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird Ihnen hilfreich sein.
1. JAVA-Ausnahmen
Ausnahmen beziehen sich auf verschiedene unerwartete Situationen, wie zum Beispiel: Datei nicht gefunden, Netzwerkverbindungsfehler, ungültige Parameter usw . Eine Ausnahme ist ein Ereignis, das während der Programmausführung auftritt und den normalen Befehlsfluss stört. Java beschreibt verschiedene Ausnahmen durch zahlreiche Unterklassen der Throwable-Klasse in der API. Daher sind Java-Ausnahmen Objekte, Instanzen einer Throwable-Unterklasse, die Fehlerbedingungen beschreiben, die in einem Teil der Codierung auftreten. Fehler löst eine Ausnahme aus, wenn die Bedingung generiert wird.
Java-Ausnahmeklassenhierarchiediagramm:
Wurfbar: Es gibt zwei Zwei wichtige Unterklassen: Exception (Exception) und Error (Error). Beide sind wichtige Unterklassen der Java-Ausnahmebehandlung und enthalten jeweils eine große Anzahl von Unterklassen.
Fehler: ist ein Fehler, den das Programm nicht verarbeiten kann, was auf ein schwerwiegendes Problem beim Ausführen der Anwendung hinweist. Die meisten Fehler haben nichts mit vom Codeschreiber ausgeführten Aktionen zu tun, sondern stellen Probleme mit der JVM (Java Virtual Machine) dar, während der Code ausgeführt wird. Beispielsweise tritt bei einem Ausführungsfehler der Java Virtual Machine (Virtual MachineError) ein OutOfMemoryError auf, wenn die JVM nicht mehr über die erforderlichen Speicherressourcen verfügt, um den Vorgang weiter auszuführen. Wenn diese Ausnahmen auftreten, entscheidet sich die Java Virtual Machine (JVM) im Allgemeinen dafür, den Thread zu beenden.
Ausnahme: ist eine Ausnahme, die vom Programm selbst behandelt werden kann.
Java-Ausnahmen (einschließlich Ausnahme und Fehler) werden in geprüfte Ausnahmen (geprüfte Ausnahmen) und ungeprüfte Ausnahmen (ungeprüfte Ausnahmen) unterteilt.
Überprüfbare Ausnahmen (Ausnahmen, die vom Compiler behandelt werden müssen): Ausnahmen, die leicht auftreten und tolerierbar sind, wenn ein korrektes Programm ausgeführt wird. Obwohl es sich bei überprüfbaren Ausnahmen um abnormale Situationen handelt, kann mit ihrem Auftreten bis zu einem gewissen Grad gerechnet werden. Sobald solche abnormalen Situationen auftreten, müssen sie auf irgendeine Weise behandelt werden.
Außer RuntimeException und seinen Unterklassen sind andere Exception-Klassen und ihre Unterklassen überprüfbare Ausnahmen. Das Merkmal dieser Art von Ausnahme ist, dass der Java-Compiler sie überprüft. Das heißt, wenn diese Art von Ausnahme im Programm auftritt, verwenden Sie entweder die Try-Catch-Anweisung, um sie abzufangen, oder verwenden Sie die Throws Klausel, um es zu deklarieren, sonst wird der Compiler nicht bestehen.
Nicht überprüfbare Ausnahmen (Ausnahmen, für die der Compiler keine erzwungene Behandlung erfordert): umfassen Laufzeitausnahmen (RuntimeException und ihre Unterklassen) und Fehler (Error).
Hinweis: Ausnahmen können vom Programm selbst behandelt werden, Fehler können jedoch nicht behandelt werden.
Ausnahme Diese Ausnahme ist in zwei Hauptkategorien unterteilt: Laufzeitausnahmen und Nicht-Laufzeitausnahmen (Kompilierungsausnahmen). Das Programm sollte diese Ausnahmen so weit wie möglich behandeln.
Laufzeitausnahmen: sind Ausnahmen der RuntimeException-Klasse und ihrer Unterklassen, wie z. B. NullPointerException (Nullzeigerausnahme), IndexOutOfBoundsException (Subscript Out -of-bounds-Ausnahmen) usw. Diese Ausnahmen sind ungeprüfte Ausnahmen. Sie können wählen, ob Sie sie im Programm erfassen oder nicht behandeln möchten. Diese Ausnahmen werden im Allgemeinen durch Programmlogikfehler verursacht, und das Programm sollte versuchen, das Auftreten solcher Ausnahmen aus logischer Sicht zu vermeiden.
Das Merkmal von Laufzeitausnahmen ist, dass der Java-Compiler sie nicht überprüft. Das heißt, wenn diese Art von Ausnahme im Programm auftreten kann, auch wenn sie nicht mit einer Try-Catch-Anweisung erfasst wird. Es wird nicht mit einer Throws-Klausel deklariert. Werfen Sie es und es wird kompiliert.
Nicht-Laufzeitausnahme (Kompilierungsausnahme): ist eine andere Ausnahme als RuntimeException, und alle Typen gehören zur Exception-Klasse und ihren Unterklassen. Aus Sicht der Programmsyntax handelt es sich um eine Ausnahme, die behandelt werden muss. Wenn sie nicht behandelt wird, wird das Programm nicht kompiliert. Wie IOException, SQLException usw. und benutzerdefinierte Ausnahmen. Im Allgemeinen sind keine benutzerdefinierten geprüften Ausnahmen erforderlich.
2. Mechanismus zur Ausnahmebehandlung
In Java-Anwendungen lautet der Ausnahmebehandlungsmechanismus: Ausnahmen auslösen, abfangen Ausnahmen.
Wirft eine Ausnahme aus : Wenn in einer Methode ein Fehler auftritt und eine Ausnahme ausgelöst wird, wird die Methode erstellt ein Ausnahmeobjekt und liefert es zur Ausführung. Im Echtzeitsystem enthält das Ausnahmeobjekt Informationen wie den Ausnahmetyp und den Ausnahmestatus, wenn die Ausnahme auftritt. Das Laufzeitsystem ist dafür verantwortlich, den Code zur Behandlung der Ausnahme zu finden und auszuführen.
Ausnahmen abfangen: Nachdem eine Methode eine Ausnahme ausgelöst hat, sucht das Laufzeitsystem nach einem geeigneten Ausnahmehandler. Der potenzielle Ausnahmehandler ist die Ausnahme, die auftritt. Eine Sammlung von Methoden, die nacheinander im Aufrufstapel verbleiben. Wenn der Ausnahmetyp, den der Ausnahmebehandler verarbeiten kann, mit dem von der Methode ausgelösten Ausnahmetyp übereinstimmt, handelt es sich um einen geeigneten Ausnahmebehandler. Das Laufzeitsystem beginnt bei der Methode, bei der die Ausnahme aufgetreten ist, und überprüft die Methoden im Aufrufstapel, bis es die Methode mit dem entsprechenden Ausnahmebehandler findet und diese ausführt. Wenn das Laufzeitsystem den Aufrufstapel durchläuft und keinen geeigneten Ausnahmehandler findet, wird das Laufzeitsystem beendet. Gleichzeitig bedeutet dies, dass das Java-Programm beendet wird.
Aufgrund der nicht überprüfbaren Natur von Laufzeitausnahmen schreibt Java vor, dass Laufzeitausnahmen automatisch vom Java-Laufzeitsystem ausgelöst werden, um Anwendungen vernünftiger und einfacher zu implementieren, sodass Anwendungen Laufzeitausnahmen ignorieren können.
Fehler, die während der Methodenausführung auftreten können. Wenn die laufende Methode sie nicht abfangen möchte, lässt Java zu, dass die Methode keine auslösende Anweisung macht. Denn die meisten Fehlerausnahmen sind Situationen, die niemals auftreten dürfen und Ausnahmen sind, die vernünftige Anwendungen nicht abfangen sollten.
Für alle überprüfbaren Ausnahmen schreibt Java Folgendes vor: Eine Methode muss eine auslösende Methode abfangen oder deklarieren . Das heißt, wenn eine Methode beschließt, keine überprüfbaren Ausnahmen abzufangen, muss sie deklarieren, dass sie eine Ausnahme auslöst.
Generell schreibt Java vor, dass überprüfbare Ausnahmen abgefangen oder zum Auslösen deklariert werden müssen. Ermöglicht das Ignorieren nicht überprüfbarer RuntimeException und Fehler.
3. Ausnahmen fangen: ausprobieren, fangen und schließlich
1.try-catch-Anweisung
Ein Paar geschweifte Klammern nach dem Schlüsselwort try Wrapping Ein Codeabschnitt, in dem Ausnahmen auftreten können, wird als Überwachungsbereich bezeichnet. Wenn während der Ausführung einer Java-Methode eine Ausnahme auftritt, wird ein Ausnahmeobjekt erstellt. Die Ausnahme wird außerhalb des Überwachungsbereichs ausgelöst und das Java-Laufzeitsystem versucht, eine passende Catch-Klausel zu finden, um die Ausnahme abzufangen. Wenn es eine passende Catch-Klausel gibt, wird deren Ausnahmebehandlungscode ausgeführt und die Try-Catch-Anweisung endet. Die Programmausführung wird fortgesetzt.
Das Übereinstimmungsprinzip lautet: Wenn das ausgelöste Ausnahmeobjekt zur Ausnahmeklasse der Catch-Klausel oder zu einer Unterklasse der Ausnahmeklasse gehört, wird davon ausgegangen, dass das generierte Ausnahmeobjekt mit dem von der erfassten Ausnahmetyp übereinstimmt Fangblock.
Fängt oder deklariert keine Laufzeitausnahmen. Das Programm löst eine Ausnahme aus und beendet den Vorgang.
Sobald ein Catch einen passenden Ausnahmetyp abfängt, wird der Ausnahmebehandlungscode eingegeben. Sobald die Verarbeitung abgeschlossen ist, bedeutet dies, dass die gesamte Try-Catch-Anweisung endet. Andere Catch-Klauseln haben nicht mehr die Möglichkeit, den Ausnahmetyp abzugleichen und abzufangen. Sie sollten versuchen, die Catch-Klauseln, die Ausnahmeklassen auf niedriger Ebene erfassen, vorne zu platzieren, und versuchen, die Catch-Klauseln, die Ausnahmeklassen auf relativ hoher Ebene erfassen, hinten zu platzieren. Andernfalls wird möglicherweise die Catch-Klausel blockiert, die die zugrunde liegende Ausnahmeklasse erfasst.
2. Try-Catch-finally
Die Try-Catch-Anweisung kann auch einen dritten Teil enthalten, nämlich die Final-Klausel. Es gibt an, was ausgeführt werden soll, unabhängig davon, ob eine Ausnahme auftritt. Die allgemeine Syntaxform der try-catch-finally-Anweisung lautet:
try-Block: wird zum Abfangen von Ausnahmen verwendet. Es können null oder mehr Catch-Blöcke folgen. Wenn kein Catch-Block vorhanden ist, muss ihm ein Final-Block folgen.
catch-Block: wird verwendet, um von try abgefangene Ausnahmen zu behandeln.
finally-Block: Die Anweisungen im finally-Block werden unabhängig davon ausgeführt, ob die Ausnahme abgefangen oder behandelt wird. Wenn in einem Try-Block oder Catch-Block eine Return-Anweisung auftritt, wird der Final-Anweisungsblock ausgeführt, bevor die Methode zurückkehrt. Unter den folgenden 4 besonderen Umständen wird der „final“-Block nicht ausgeführt:
1) Im „final“-Anweisungsblock tritt eine Ausnahme auf.
2) System.exit() wird im vorherigen Code verwendet, um das Programm zu beenden.
3) Der Thread, in dem sich das Programm befindet, stirbt.
4) Schalten Sie die CPU aus.
3. Try-Catch-Finally-Regeln (Grammatikregeln für Ausnahmebehandlungsanweisungen):
1) Nach dem Versuch muss ein Catch- oder Final-Block hinzugefügt werden. Auf den Try-Block können sowohl Catch- als auch Final-Blöcke folgen, es muss jedoch mindestens ein Block vorhanden sein.
2) Die Blockreihenfolge muss eingehalten werden: Wenn der Code sowohl Catch- als auch Final-Blöcke verwendet, muss der Catch-Block nach dem Try-Block platziert werden.
3) Der Catch-Block hängt mit dem Typ der entsprechenden Ausnahmeklasse zusammen.
4) Ein Try-Block kann mehrere Catch-Blöcke haben. Wenn ja, wird der erste passende Block ausgeführt. Das heißt, die Java Virtual Machine gleicht das tatsächlich ausgelöste Ausnahmeobjekt nacheinander mit dem in jedem Catch-Codeblock deklarierten Ausnahmetyp ab. Wenn das Ausnahmeobjekt eine Instanz eines bestimmten Ausnahmetyps oder seiner Unterklasse ist, wird der Catch-Codeblock ausgeführt und kein anderer wird ausgeführt. Der Catch-Code-Block
5) Die Try-Catch-finally-Struktur kann verschachtelt werden.
6) In der Try-Catch-Finally-Struktur können Ausnahmen erneut ausgelöst werden.
7) Mit Ausnahme der folgenden Situationen wird „final“ immer als Ende ausgeführt: JVM wird vorzeitig beendet (Aufruf von System.exit(int)); Aus, Feuer oder Virenbefall.
4. Die Ausführungsreihenfolge der Try-, Catch- und Final-Anweisungsblöcke:
1) Wenn try keine Ausnahme abfängt: Die Anweisungen im Try-Anweisungsblock werden einzeln ausgeführt, und das Programm überspringt den Catch-Anweisungsblock und führt den Final-Anweisungsblock und die nachfolgenden Anweisungen aus >2) Wenn try Eine Ausnahme wird abgefangen und die Ausnahme wird nicht im Catch-Anweisungsblock behandelt: Wenn in einer Anweisung im Try-Anweisungsblock eine Ausnahme auftritt und kein Catch-Anweisungsblock zur Behandlung der Ausnahme vorhanden ist, wird die Ausnahme ausgelöst an die JVM zur Verarbeitung und die „finally“-Anweisung Die Anweisungen im Block werden weiterhin ausgeführt, aber die Anweisungen nach dem „finally“-Anweisungsblock werden nicht ausgeführt
3) Wenn try eine Ausnahme abfängt, gibt es eine Situation zur Behandlung dieser Ausnahme im Catch-Anweisungsblock: Im Try-Anweisungsblock werden sie nacheinander ausgeführt. Wenn bei der Ausführung einer bestimmten Anweisung eine Ausnahme auftritt, springt das Programm zum Catch-Anweisungsblock und gleicht die Catch-Anweisungsblöcke nacheinander ab Andere Catch-Anweisungsblöcke werden nicht ausgeführt, und im Try-Anweisungsblock werden die Anweisungen nach der Ausnahme nicht ausgeführt. Nachdem der Catch-Anweisungsblock ausgeführt wurde, werden die Anweisungen im Final-Anweisungsblock ausgeführt. und schließlich werden die Anweisungen nach dem „finally“-Anweisungsblock ausgeführt
Veranschaulichung der Ausführung von „try“, „catch“ und „finally“-Anweisungsblöcken:
5.Ausnahmen auslösen Jeder Java-Code kann Ausnahmen auslösen, z. B. von Ihnen selbst geschriebener Code , Code aus dem Java-Entwicklungsumgebungspaket oder dem Java-Laufzeitsystem. Jeder kann über die throw-Anweisung von Java eine Ausnahme auslösen. Jede von einer Methode ausgelöste Ausnahme muss eine throws-Klausel verwenden.
1. löst eine Ausnahme aus Wenn eine Methode eine Ausnahme auslösen kann, aber nicht dazu in der Lage ist Behandeln Sie Ausnahmen können mithilfe der throws-Klausel in der Methodendeklaration deklariert werden.
Die Auslöser Exception1,Exception2,...,ExceptionN nach dem Methodennamen sind die Liste der auszulösenden Ausnahmen. Wenn eine Methode eine Ausnahme aus der Ausnahmeliste auslöst, behandelt die Methode keine Ausnahmen dieser Typen und ihrer Unterklassentypen, sondern wirft sie zur Behandlung an die Methode, die die Methode aufruft.
Wirft Regeln zum Auslösen von Ausnahmen aus: 1) Wenn es sich um eine ungeprüfte Ausnahme handelt, also um Error, RuntimeException oder deren Unterklasse, dann Sie können die Ausnahme auch ohne Verwendung des Schlüsselworts throws auslösen lassen. Die Kompilierung verläuft weiterhin reibungslos, sie wird jedoch zur Laufzeit vom System ausgelöst.
2) Alle geprüften Ausnahmen, die die Methode auslösen kann, müssen deklariert werden. Das heißt, wenn eine Methode möglicherweise eine überprüfbare Ausnahme hat, verwenden Sie entweder eine Try-Catch-Anweisung, um sie abzufangen, oder eine Throws-Klausel-Anweisung, um sie auszulösen. Andernfalls wird ein Kompilierungsfehler verursacht
3) Nur wenn Es wird eine Ausnahme ausgelöst. Nur der Aufrufer dieser Methode muss die Ausnahme behandeln oder erneut auslösen. Wenn der Aufrufer der Methode die Ausnahme nicht verarbeiten kann, sollte er sie weiterhin auslösen
4) Die aufrufende Methode muss den Behandlungs- und Deklarationsregeln jeder überprüfbaren Ausnahme folgen. Wenn Sie eine Methode überschreiben, können Sie keine andere Ausnahme als die überschriebene Methode deklarieren. Jede deklarierte Ausnahme muss derselben Klasse oder Unterklasse angehören wie die von der überschriebenen Methode deklarierte Ausnahme.
Die Grundlage für die Beurteilung, dass eine Methode möglicherweise abnormal ist, ist wie folgt:
1) -Methode.
2) Andere Methoden werden aufgerufen und andere Methoden werden mit der throws-Klausel deklariert, um eine Art Ausnahme auszulösen.Wenn alle Methoden die erhaltenen Ausnahmen Schicht für Schicht auslösen, wird die JVM sie schließlich verarbeiten. Die Verarbeitung ist ebenfalls sehr einfach, nämlich das Drucken der Ausnahmemeldung und der Stapelinformationen. Wenn ein Fehler oder eine RuntimeException ausgelöst wird, kann der Aufrufer der Methode wählen, ob er die Ausnahme behandeln möchte.
2. Gängige Methoden in der Throwable-Klasse getCause(): Gibt den Grund für das Auslösen der Ausnahme zurück. Wenn die Ursache nicht existiert oder unbekannt ist, wird null zurückgegeben.
getMeage(): Gibt abnormale Nachrichteninformationen zurück. printStackTrace(): Der Stack-Trace des Objekts wird als Wert des Felds System.err an den Fehlerausgabestream ausgegeben.6. Häufige Java-Ausnahmen
Java bietet einige Ausnahmen, um häufig auftretende Fehler zu beschreiben. Für diese Ausnahmen müssen einige Programmierer eine Erfassungsverarbeitung durchführen oder einen Wurf deklarieren , und einige werden automatisch von der Java Virtual Machine erfasst. Häufige Ausnahmeklassen in Java:
1. runtimeException-Unterklasse: (ungeprüfte Ausnahme)
java.lang.ArrayIndexOutOfBoundsException
Array-Index-Ausnahme außerhalb der Grenzen. Wird ausgelöst, wenn der Index im Array negativ oder größer oder gleich der Arraygröße ist.
java.lang.ArithmeticException
Arithmetische Bedingungsausnahme. Zum Beispiel: Ganzzahldivision durch Null usw.
java.lang.NullPointerException
Nullzeiger-Ausnahme. Diese Ausnahme wird ausgelöst, wenn die Anwendung versucht, null zu verwenden, wenn ein Objekt erforderlich ist. Zum Beispiel: Aufrufen der Instanzmethode des Nullobjekts, Zugriff auf die Eigenschaften des Nullobjekts, Berechnen der Länge des Nullobjekts, Verwenden der Throw-Anweisung zum Auslösen von Null usw.
java.lang.ClassNotFoundException
Kleiner als eine Klassenausnahme suchen. Diese Ausnahme wird ausgelöst, wenn die Anwendung versucht, eine Klasse basierend auf einem Klassennamen in Zeichenfolgenform zu erstellen, nach dem Durchlaufen von CLASSPAH jedoch die Klassendatei mit dem entsprechenden Namen nicht finden kann.
java.lang.NegativeArraySizeException Die Array-Länge ist negativ
java.lang.ArrayStoreException Das Array enthält inkompatible Werte
java.lang.SecurityException Sicherheitsausnahme
2. IOException (geprüfte Ausnahme)
IOException: Möglich, wenn Eingabe- und Ausgabestreams abnormal funktionieren.
EOFException Datei beendet Ausnahme
FileNotFoundException Datei nicht gefunden Ausnahme
Sonstige
ClassCastException Type Konvertierungsausnahmeklasse
ArrayStoreException Ausnahme wird ausgelöst, wenn das Array inkompatible Werte enthält
SQLException Operation Datenbankausnahmeklasse
NoSuchFieldException Ausnahme „Feld nicht gefunden“
NoSuchMethodException Die Ausnahme wird ausgelöst, wenn die Methode nicht gefunden wird
NumberFormatException Die Ausnahme wird ausgelöst, wenn die Zeichenfolge in eine Zahl konvertiert wird
StringIndexOutOfBoundsException Die Ausnahme wird ausgelöst, wenn der Zeichenfolgenindex außerhalb des Bereichs liegt
IllegalAccessException Zugriff nicht zulässig Bestimmter Ausnahmetyp
InstantiationException Diese Ausnahme wird ausgelöst, wenn die Anwendung versucht, die newInstance()-Methode in der Class-Klasse zu verwenden, um eine Instanz einer Klasse zu erstellen, das angegebene Klassenobjekt jedoch nicht instanziiert werden kann
4. Benutzerdefinierte Ausnahmen
Mit der in Java integrierten Ausnahmeklasse können die meisten Ausnahmen beschrieben werden, die während der Programmierung auftreten. Darüber hinaus können Benutzer auch Ausnahmen anpassen. Benutzerdefinierte Ausnahmeklassen müssen nur die Ausnahmeklasse erben.
Die Verwendung benutzerdefinierter Ausnahmeklassen in einem Programm kann grob in die folgenden Schritte unterteilt werden.
(1) Erstellen Sie eine benutzerdefinierte Ausnahmeklasse.
(2) Werfen Sie ein Ausnahmeobjekt über das Schlüsselwort throw in der Methode aus.
(3) Wenn die Ausnahme in der Methode behandelt wird, die die Ausnahme derzeit auslöst, können Sie sie mit der try-catch-Anweisung erfassen und behandeln. Andernfalls verwenden Sie das Schlüsselwort throws in der Deklaration der Methode, um die Ausnahme anzugeben an den Methodenaufrufer geworfen werden und fortfahren. Fahren Sie mit dem nächsten Schritt fort.
(4) Ausnahmen im Aufrufer der Ausnahmemethode abfangen und behandeln.
Zusammenfassung: Das Obige ist der gesamte Inhalt dieses Artikels, ich hoffe, dass er für das Studium aller hilfreich sein wird. Weitere verwandte Tutorials finden Sie unter Java-Video-Tutorial, Java-Entwicklungsgrafik-Tutorial, Bootstrap-Video-Tutorial!
Das obige ist der detaillierte Inhalt vonWas ist eine Java-Ausnahme? Wie werden Java-Ausnahmen behandelt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!