Dieser Artikel beschreibt hauptsächlich die Einführung und Architektur von Java-Ausnahmen, die einen gewissen Referenzwert haben. Interessierte Freunde können sich auf
Einführung in Java-Ausnahmen
Ausnahmebehandlung und den normalen Geschäftscode im Programm trennen, wodurch sichergestellt wird, dass der Programmcode eleganter ist und die Robustheit des Programms verbessert wird. Wenn Ausnahmen effektiv verwendet werden, können Ausnahmen die drei Fragen Was, Wo, Warum klar beantworten: Der Ausnahmetyp antwortet „Was“ wurde ausgelöst, und der Ausnahme-Stack-Trace antwortet „Wo“ Es wurde ausgelöst. Die Ausnahmemeldung antwortet mit dem „Warum“ sie ausgelöst wird. Mehrere Schlüsselwörter, die im Java-Ausnahmemechanismus verwendet werden:
versuchen, fangen, schließlich werfen, wirft. • Versuchen Sie — zur Überwachung. Platzieren Sie den zu überwachenden Code (Code, der
eine Ausnahme auslösen kann) im try-Anweisungsblock . Wenn eine Ausnahme im try-Anweisungsblock auftritt, wird die Ausnahme ausgelöst. • Catch – wird zum Abfangen von Ausnahmen verwendet. Catch wird verwendet, um Ausnahmen abzufangen, die im Try-Anweisungsblock auftreten.
• „final“ – Der „final“-Block wird immer ausgeführt. Es wird hauptsächlich zum Recyceln physischer Ressourcen (z. B. Datenbankverbindungen, Netzwerkverbindungen und Festplattendateien) verwendet, die in Try-Blöcken geöffnet sind. Nur der „final“-Block kehrt nach Abschluss der Ausführung zurück, um die Return- oder Throw-Anweisung im „try“- oder „catch“-Block auszuführen. Wenn eine Anweisung wie „return“ oder „throw“ im „final“-Block verwendet wird, wird nicht zur Ausführung zurückgesprungen direkt anhalten.
• throw – wird zum Auslösen von Ausnahmen verwendet.
• throws – werden in Methodensignaturen verwendet, um Ausnahmen zu deklarieren, die von der Methode ausgelöst werden können.
Beispiel 1: Verstehen Sie die grundlegende Verwendung von Try und Catch
public class Demo1 { public static void main(String[] args) { try { int i = 10/0; System.out.println("i="+i); } catch (ArithmeticException e) { System.out.println("Caught Exception"); System.out.println("e.getMessage(): " + e.getMessage()); System.out.println("e.toString(): " + e.toString()); System.out.println("e.printStackTrace():"); e.printStackTrace(); } } }Laufergebnis:
Abgefangene Ausnahme e.getMessage(): / durch Null
e.toString(): java.lang.ArithmeticException: / durch Null
e.printStackTrace():
java.lang.ArithmeticException: / durch Null
bei Demo1.main(Demo1.java:6)
Beispiel 2: Verstehen Sie die grundlegende Verwendung von „final“ Basierend auf „Beispiel 1“ fügen wir die „final“-Anweisung hinzu.
public class Demo2 { public static void main(String[] args) { try { int i = 10/0; System.out.println("i="+i); } catch (ArithmeticException e) { System.out.println("Caught Exception"); System.out.println("e.getMessage(): " + e.getMessage()); System.out.println("e.toString(): " + e.toString()); System.out.println("e.printStackTrace():"); e.printStackTrace(); } finally { System.out.println("run finally"); } } }Laufergebnis:
Abgefangene Ausnahmee.getMessage(): / by Zero
e.toString(): java.lang.ArithmeticException: / durch Null
e.printStackTrace():
java.lang.ArithmeticException: / durch Null
bei Demo2.main(Demo2.java:6)
endgültig ausführen
Beispiel 3: Verstehen Sie die grundlegende Verwendung von throws und throwThrows wird zum Deklarieren ausgelöster Ausnahmen verwendet, während throw zum Auslösen von Ausnahmen verwendet wird.
class MyException extends Exception { public MyException() {} public MyException(String msg) { super(msg); } } public class Demo3 { public static void main(String[] args) { try { test(); } catch (MyException e) { System.out.println("Catch My Exception"); e.printStackTrace(); } } public static void test() throws MyException{ try { int i = 10/0; System.out.println("i="+i); } catch (ArithmeticException e) { throw new MyException("This is MyException"); } } }Ergebnis ausführen:
Catch My ExceptionMyException: This is MyException
at Demo3.test(Demo3.java:24)
bei Demo3.main(Demo3.java:13)
Java-Ausnahme-Framework
1. Throwable
Throwable enthält zwei Unterklassen: Error und Exception. Sie werden oft verwendet, um darauf hinzuweisen, dass etwas Ungewöhnliches passiert ist.
Throwable enthält einen Snapshot des Thread-Ausführungsstapels, wenn sein Thread erstellt wird. Es stellt Schnittstellen wie printStackTrace() bereit, um Stack-Trace-Daten und andere Informationen zu erhalten.
2. Exception
3. RuntimeException
RuntimeException ist eine Superklasse von Ausnahmen, die während des normalen Betriebs der Java Virtual Machine ausgelöst werden können.
Der Compiler prüft nicht auf RuntimeException. Wenn der Divisor beispielsweise Null ist, wird eine ArithmeticException ausgelöst. RuntimeException ist die Oberklasse von ArithmeticException. Wenn der Code durch Null dividiert wird, kann er trotzdem kompiliert werden, wenn er weder eine ArithmeticException über die throws-Anweisung auslöst noch die Ausnahme über try...catch... behandelt. Das meinen wir mit „Der Compiler prüft nicht auf RuntimeException“!
Wenn der Code eine RuntimeException generiert, müssen Sie den Code ändern, um dies zu vermeiden. Wenn beispielsweise eine Division durch Null auftritt, müssen Sie dies durch Code vermeiden!
4. Error
Wie Exception ist auch Error eine Unterklasse von Throwable. Es wird verwendet, um auf schwerwiegende Probleme hinzuweisen, die vernünftige Anwendungen nicht abfangen sollten. Bei den meisten dieser Fehler handelt es sich um Ausnahmebedingungen.
Wie bei RuntimeException prüft der Compiler nicht auf Fehler.
Java unterteilt ausführbare Strukturen in drei Typen: Checked Exception, RuntimeException und Error.
(01) Laufzeitausnahme
Definition: RuntimeException und ihre Unterklassen werden Laufzeitausnahmen genannt.
Funktion: Der Java-Compiler prüft dies nicht. Mit anderen Worten: Wenn eine solche Ausnahme im Programm auftritt und sie weder durch die Throws-Anweisung ausgelöst noch durch die Try-Catch-Anweisung abgefangen wird, wird sie trotzdem kompiliert. Beispielsweise sind ArithmeticException, die generiert wird, wenn der Divisor Null ist, IndexOutOfBoundsException, die generiert wird, wenn das Array die Grenze überschreitet, ConcurrentModificationException, die durch den Fail-Fail-Mechanismus generiert wird, usw. allesamt Laufzeitausnahmen.
Obwohl der Java-Compiler keine Laufzeitausnahmen prüft, können wir sie auch durch Würfe deklarieren oder durch Try-Catch abfangen.
Wenn eine Laufzeitausnahme auftritt, müssen Sie den Code ändern, um sie zu vermeiden. Wenn beispielsweise eine Division durch Null auftritt, müssen Sie dies durch Code vermeiden!
(02) Geprüfte Ausnahme
Definition: Ausnahmeklasse selbst und andere Unterklassen von Ausnahmeunterklassen außer „Laufzeitausnahme“. Es handelt sich um eine geprüfte Ausnahme.
Funktion: Der Java-Compiler prüft dies. Solche Ausnahmen müssen entweder durch Throws deklariert und ausgelöst oder durch Try-Catch abgefangen und verarbeitet werden, andernfalls können sie die Kompilierung nicht bestehen. Beispielsweise ist CloneNotSupportedException eine geprüfte Ausnahme. Wenn ein Objekt über die clone()-Schnittstelle geklont wird und die dem Objekt entsprechende Klasse die Cloneable-Schnittstelle nicht implementiert, wird eine CloneNotSupportedException-Ausnahme ausgelöst.
Überprüfte Ausnahmen sind normalerweise wiederherstellbar.
(03) Fehler
Definition: Fehlerklasse und ihre Unterklassen.
Funktionen: Wie bei Laufzeitausnahmen führt der Compiler keine Prüfung auf Fehler durch.
Wenn die Ressourcen nicht ausreichen, Einschränkungen fehlschlagen oder andere Bedingungen auftreten, die die weitere Ausführung des Programms verhindern, tritt ein Fehler auf. Das Programm selbst kann diese Fehler nicht beheben. Beispielsweise ist VirtualMachineError ein Fehler.
Gemäß der Java-Konvention sollten wir keine neuen Error-Unterklassen implementieren!
Welche sollten wir für die oben genannten drei Strukturen verwenden, wenn wir eine Ausnahme oder einen Fehler auslösen? In „Effective Java“ wird empfohlen, geprüfte Ausnahmen für wiederherstellbare Bedingungen und Laufzeitausnahmen für Programmfehler zu verwenden.
Das obige ist der detaillierte Inhalt vonEine kurze Einführung in Java-Ausnahmen und -Architektur. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!