Heim  >  Artikel  >  Java  >  Eine kurze Einführung in Java-Ausnahmen und -Architektur

Eine kurze Einführung in Java-Ausnahmen und -Architektur

怪我咯
怪我咯Original
2017-06-30 10:58:341403Durchsuche

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

Java-Ausnahmen sind ein von Java bereitgestellter konsistenter Mechanismus zur Identifizierung und Reaktion auf Fehler.


Der Java-Ausnahmemechanismus kann den Code zur

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.

Im Folgenden finden Sie eine kurze Erläuterung dieser Schlüsselwörter anhand mehrerer Beispiele.


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)

Ergebnisbeschreibung: Im try-Anweisungsblock gibt es eine Operation zum Teilen durch 0, die Java auslöst .lang .ArithmeticException. Fangen Sie die Ausnahme mit Catch ab.


Bei der Betrachtung der Ergebnisse stellten wir fest, dass System.out.println("i="+i) nicht ausgeführt wurde. Dies zeigt, dass nach dem Auftreten einer Ausnahme im Try-Anweisungsblock der verbleibende Inhalt im Try-Anweisungsblock nicht mehr ausgeführt wird.


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

Ergebnisbeschreibung: Der „finally“-Anweisungsblock wird schließlich ausgeführt.


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)

Ergebnisbeschreibung:


MyException ist eine von Exception geerbte Unterklasse. Eine ArithmeticException-Ausnahme (Divisor ist 0) wird im try-Anweisungsblock von test() generiert und die Ausnahme wird in Catch erfasst. Anschließend wird eine MyException-Ausnahme ausgelöst. Die Methode main() erfasst die in test() ausgelöste MyException.


Java-Ausnahme-Framework

Java-Ausnahmearchitekturdiagramm

1. Throwable

Throwable ist die Superklasse aller Fehler oder Ausnahmen in der Java-Sprache.

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

Exception und ihre Unterklassen sind eine Form von Throwable, die auf vernünftige Bedingungen hinweist die Anwendung erfassen möchte.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn