Frage

Was sind die Runtime Ausnahmen und welche aktiviert / deaktiviert Ausnahmen und die Differenz zwischen Error / Exception.Why viele Arten? Statt einfach Java kann ein einfaches Design folgen (nur versuchen, / alle Arten fangen) einen abnormalen Zustand in einem Programm zu handhaben?

War es hilfreich?

Lösung

ist Throwable an der Spitze aus allen Ausnahmen. Unter Throwable Sie haben Fehler und Ausnahme. Unter Ausnahme haben Sie Runtime.

Java hat zwei Arten von Ausnahmen - geprüft und ungeprüft. Checked Ausnahmen vom Compiler erzwungen werden (man muss sie erklären, in der throws-Klausel und fangen sie schließlich). Ungeprüfter Ausnahmen werden nicht erzwungen für den Fang oder erklärt in throws-Klausel.

(Umstrittener Teil der Antwort)

existiert Throwable, so dass ein Elternteil für alle Ausnahmetypen ist. Sie sollten sich nicht erklären, dass Sie Throwable werfen und es nie fangen (es sei denn, Sie wirklich wirklich wirklich wissen, was Sie tun).

Fehler existieren Probleme mit der Laufzeitumgebung, um anzuzeigen, Dinge, dass Ihr Programm wahrscheinlich nicht erholen kann, wie eine falsch formatierte Klassendatei oder die VM Arbeitsspeicher knapp. Sie sollten keine Fehler fangen, wenn Sie wirklich wissen, was Sie tun.

Ausnahme existiert als die Wurzel für alle Nicht-Programmierer Fehler (siehe Runtime für die „Ausnahme“ dazu), wie eine Datei erstellt werden kann, da die Festplatte voll ist. Sie sollten nicht, wirft, oder fangen Exception werfen. Wenn Sie fangen Ausnahme machen müssen sicher wissen, was Sie tun.

Runtime existiert alle Programmierer Fehler anzuzeigen, wie über das Ende eines Arrays zu gehen oder eine Methode auf ein Null-Objekt aufrufen. Dies sind Dinge, die Sie sollten so fixieren, dass sie nicht Ausnahmen werfen - die zeigen, dass Sie, der Programmierer den Code vermasselt. Auch hier sollten Sie diese nicht fangen, wenn Sie wissen, was Sie tun.

Andere Tipps

Da ich einen neuen Java-Entwickler bin, habe ich auch einige Schwierigkeiten zu unterscheiden und den Umgang mit verschiedenen Arten von Ausnahmen konfrontiert. Deshalb habe ich eine kurze Notiz zu diesem Thema gemacht haben, und wenn ich ich durch sie gehen verwirren. Hier ist es mit dem Bild der Throwable Klassenhierarchie:
Throwable Klassenhierarchie

[Bild mit freundlicher Genehmigung von JavaTpoint ].

Es gibt drei wichtige Klassen hier erinnern: Throwable, Exception und Error. Unter diesen Klassen können Exception in zwei Typen unterteilt werden: „Geprüft Exception“ und „Ungeprüfter Exception“

.

Checked Ausnahme:

  • Dies sind die Klassen, die Throwable außer RuntimeException und Error verlängern.
  • Sie werden auch als Kompilierung Ausnahmen bekannt, weil sie bei der Kompilierung überprüft werden, was bedeutet, den Compiler zwingt uns zu jeder Griff sie mit try/catch oder anzuzeigen, in der Funktion Unterschrift, dass sie throws sie und zwingt uns, mit ihnen in dem Anrufer zu behandeln .
  • Sie sind programmatisch erzielbare Probleme, die durch unerwartete Bedingungen außerhalb der Kontrolle des Codes verursacht werden (zum Beispiel Datenbank nach unten, Datei-I / O-Fehler, falsche Eingabe, usw.).
  • . Beispiel: IOException, SQLException, etc

Nicht markiert Ausnahme:

  • Die Klassen, die RuntimeException erstrecken, sind als nicht markiert Ausnahmen bekannt.
  • sind Ungeprüfter Ausnahmen nicht zur Compile-Zeit überprüft, sondern zur Laufzeit, daher der Name.
  • Sie sind auch programmatisch erzielbare Probleme, aber im Gegensatz zu geprüfte Ausnahme sie durch Fehler im Code Fluss oder Konfiguration verursacht werden.
  • . Beispiel: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, etc
  • Da sie Fehler programmieren, können sie durch gut vermieden werden / weise Codierung. Zum Beispiel „Division durch Null“ erzeugt eine ArithmeticException, die durch eine einfache Überprüfung der Divisor vermieden werden kann. NullPointerException oder sogar mit bessere Techniken .

Fehler:

  • Error bezieht sich auf eine unwiederbringliche Situation, die nicht von einem try/catch behandelt wird.
  • . Beispiel: OutOfMemoryError, VirtualMachineError, AssertionError, etc

Warum sind diese viele Arten?

Neben Stephen C 's Antwort, die ich mag sagen: Ausnahmebehandlung ist eine relativ teuere Operation in Java. Wir sollten nicht alle Ausnahmesituation in einem try/catch Block setzen. Der übermäßige Gebrauch von try/catchs kann die Programmleistung behindern.

Abschließend sollte Exceptions programmatisch, wann immer möglich gehandhabt werden. Auf der anderen Seite können wir Errors nicht umgehen, so dass diese möglicherweise einige logische Gründe, warum es viele Arten von Ausnahmen.

TofuBeer Antwort erklärt deutlich, was die Ausnahme Klassen bedeuten.

Warum diese viele Arten? Statt einfach Java kann ein einfaches Design folgen (nur versuchen, / alle Arten fangen) einen abnormalen Zustand in einem Programm zu behandeln?

Warum? Denn sie sind notwendig! Ohne diese vier Klassen würden Ausnahmen durch breite Kategorie Handhabung unpraktisch.

  • Wie würden Sie "alle fatal JVM Fehler" ohne die Error Klasse fangen?
  • Wie würden Sie „alle Ausnahmen, die nicht JVM fatalen Fehler“ fangen, ohne die Exception Klasse?
  • Wie würden Sie „alle ungeprüften Ausnahmen“ ohne die RuntimeException Klasse fangen?
  • Fehler (führt von VM sollte nicht gefangen oder behandelt werden)
    1. VM Fehler
    2. Assertion Fehler
    3. Linkage Fehler ... usw.
  • Runtime / Deaktivieren Sie die Option Ausnahme (Fehler der Programmierung sollte nicht gefangen oder behandelt werden)
    1. Nullpointer
    2. ArrayIndexOutOfBoundException
    3. Illegal ... usw.
  • Check Exception (Anything Else, Anwendungen werden erwartet, gefangen oder behandelt werden)
    1. IOException
    2. FileNotFoundException
    3. SQLException ... usw.

Runtime Ausnahmen bieten Ihnen die Flexibilität zu kontrollieren, um zu vermeiden, die Ausnahmen zu deklarieren.

Der Unterschied zwischen aktivierten und deaktivierten Ausnahmen:

Wir haben viele Unterschiede zwischen den aktivierten und deaktivierten Ausnahme, sondern alle Unterschiede von einmal grundlegende Überlegung ausgehen, dass, ob die Ausnahme von Compiler auflösbar ist oder nicht.

Zu beachtende Punkte sind:

[1] Geprüfte Ausnahme Mittel Compiler überprüft Ausnahmen . Es bedeutet, dass Compiler Mandate, dass eine solche Ausnahme von Try-Catch-Block behandelt werden oder wirft Schlüsselwort.

[2] Ungeprüfte Ausnahmen sind diejenigen, für die Compiler nicht stellt kein Mandat , wie sie durch Entwickler gelöst werden können durch Codierung / Programmierung als Steuerstrom steuerbar wie in ArithmeticException, Nullpointer ArrayIndexOutOfBoundsException , Illegal, etc.

Ich nenne es „Exception-Identität-Test“ , wo Sie nehmen jede zufällige Ausnahme von Java-doc und es nur eine Frage stellen. „Hey Ausnahme! Können Sie programmatisch gelöst werden?“

Wenn die Ausnahme, sagt YES , dann ist es eine ungeprüfte Ausnahme, da dies entweder durch Codeänderung gelöst werden kann, oder die Lösung einige Berechnungsfehler etc.

Auf der anderen Seite, wenn die Ausnahme, sagt Nein , dann wird dies geprüfte Ausnahme wie in geprüftem Ausnahmesteuerungsablauf geht unser Codes aus wie wenn jemand ändert Datenbank-Passwörter oder jemand unplugs das Netzwerkkabel, Verbindungszeit (Connect) wird einige Ressource nicht gefunden (FileNotFoundException, ClassNotFound), SQLException, InvocatonTargetException usw. Diese hier nicht durch Programmierung gelöst werden

Die Artikel sumarizes Checked und Ungeprüfter Ausnahmen in einer klaren und präzisen Art und Weise.

  • Checked Ausnahmen : Checked Ausnahmen sind die Ausnahmen, die nachgewiesen werden können, identifiziert und überprüft bei der Kompilierung. Wenn ein Codeblock eine geprüfte Ausnahme dann die Methode löst muss die Ausnahme behandeln oder es muss die Ausnahme mit throws Schlüsselwort angeben.

    • Beispiel :

      public void testDB() throws ClassNotFoundException, SQLException
      {
          Class.forName("com.mysql.jdbc.Driver");
          System.out.println("Driver Loaded");
          Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/selenium","root","root");
          System.out.println("Connected to MySQL DB");
      }
      
    • Wir müssen entweder Liste der Ausnahmen spezifizieren mit wirft, oder wir brauchen try-catch{} Block zu verwenden. Ich habe die useage von throws in dem unten stehenden Programm unter Beweis gestellt.

  • Ungeprüfter Ausnahmen : Ungeprüfter Ausnahmen sind nicht kompilierten Zeit geprüft. Java Ausnahmen unter Error und RuntimeException Klassen sind nicht markiert Ausnahmen und alles andere unter throwable aktiviert ist.

Zusammenfassung : Wenn ein Client zugemutet werden kann von einer Ausnahme zu erholen, sie macht eine geprüfte Ausnahme. Wenn ein Kunde nichts von der Ausnahme erholen tun kann, macht es eine ungeprüfte Ausnahme.

Die folgende Abbildung zeigt die Hierarchie der Exception-Klassen. Die Basisklasse für alle Exception-Objekte ist java.lang.Throwable, zusammen mit seinen zwei Unterklassen java.lang.Exception und java.lang.Error.

  • Die Error Klasse beschreibt interne Systemfehler (zum Beispiel VirtualMachineError, LinkageError), die selten auftreten. Wenn ein solcher Fehler auftritt, gibt es wenig, dass Sie tun können, und das Programm wird durch die Java-Runtime beendet werden.

  • Die Exception Klasse beschreibt den Fehler durch das Programm verursacht (z FileNotFoundException, IOException). Diese Fehler können von Ihrem Programm abgefangen und verarbeitet werden (zum Beispiel führt eine alternative Aktion oder macht einen guten Abgang durch alle Schließen der Dateien, Netzwerk- und Datenbankverbindungen).

Checked vs Ungeprüfter

Wie dargestellt, die Unterklassen von Error und RuntimeException werden als bekannt ungeprüft Ausnahmen. Diese Ausnahmen werden nicht vom Compiler überprüft, und daher muss nicht gefangen oder erklärt werden, um in Ihrem Programm geworfen werden. Dies liegt daran, es gibt nicht viel Sie mit diesen Ausnahmen machen können. Zum Beispiel löst eine „Division durch 0“ ein ArithmeticException, Array-Index out-of-gebundener Auslöser ein ArrayIndexOutOfBoundException, die wirklich logische Fehler programmieren, die in kompilierter Zeit festgesetzt worden sind, anstatt es zu Laufzeitausnahmebehandlung zu verlassen.

Alle anderen Ausnahme genannt werden geprüft Ausnahmen. Sie werden durch den Compiler überprüft und müssen gefangen oder deklariert werden geworfen werden.

RuntimeException und ihre Unterklassen werden vom Compiler nicht überprüft und muss nicht in der Signatur des Verfahrens deklariert werden. Daher sie mit Sorgfalt verwenden, da Sie nicht informiert werden und nicht von den Ausnahmen bewusst sein, die mit dieser Methode (und daher nicht über die richtige Ausnahmebehandlung Codes) auftreten kann, -. Eine schlechte Software-Engineering-Praxis

Die Quelle ist hier

Exceptions are two types in java:

1. **Checked Exception: The exceptions which are checked by compiler. 

Zum Beispiel:. Wir Sie Betrieb mit Datei ausführen, dann Compiler wird Sie fragen, IOException entweder durch Try-Catch-Block zu behandeln oder wirft Schlüsselwort

2. Unchecked Exception: The exceptions which are not checked by compiler at run time. 

Zum Beispiel: Wenn Sie Operation an einem Objekt durchführen, ohne es zu schaffen; in diesem Fall werden Sie Nullpointer bekommen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top