Frage

Ich verfolge diese große Diskussion auf SO, mit dem Titel: , aber ich bin nicht in der Lage, wo genau folgen Runtime verwendet werden soll und wie es unterscheidet sich von normalen Ausnahmen und ihrer Unterklassen. Googeln hat mir eine komplexe Antwort, das heißt, es verwendet werden soll mit der Programmierung Logikfehlern zu behandeln und geworfen werden soll, wenn keine Ausnahme normalerweise, wie in dem Standardblock switch-case-Konstrukts auftreten sollte.

Können Sie bitte Runtime hier näher erläutern. Danke.

War es hilfreich?

Lösung

  

Ich bin nicht in der Lage, wo genau folgen   Runtime sollte verwendet werden,

Das ist wahrscheinlich, weil Sie in einem suchen Argument , das heißt die Menschen nicht einverstanden über genau diesen Punkt.

  

und   wie es unterscheidet sich von normalen   Ausnahmen und ihre Unterklassen.

Ganz einfach: Alle Subklassen von Exception (mit Ausnahme von RuntimeException und ihre Unterklassen) sind aktiviert das heißt der Compiler den Code ablehnen unelss Sie sie in der Methodensignatur fangen oder zu erklären. Allerdings Subklassen von RuntimeException sind nicht markiert .

  

Googeln hat mir eine komplexe Antwort,   das heißt, es sollte verwendet werden, zu behandeln   mit Programmierlogikfehler und   soll, wenn keine Ausnahme ausgelöst werden   sollte normalerweise auftreten, wie beispielsweise in der   Standardblock switch-case   Konstrukt.

Dies ist die konventionelle Weisheit, die alles sagt, dass ein Programm sinnvollerweise mit umgehen können, sollten Sie Ausnahmen geprüft verwenden, weil dann der Compiler Kraft Sie mit ihnen umgehen. Umgekehrt können Programme in der Regel nicht sinnvoll mit Programmierfehlern umgehen, so müssen sie nicht überprüft werden. Dies ist, wie der Java Standard API verwendet RuntimeException.

Die Diskussion Sie verknüpft wird durch die Ansicht einiger Menschen ausgelöst (dies schließt mich), die denken, dass überprüft Ausnahmen von fehlerhaftem Code führen und sollten daher nicht verwendet werden. Da kann man nicht deaktivieren Ausnahmenüberprüfung in den Compiler, der einzige Weg, dies zu tun, ist die Verwendung nur RuntimeException und ihre Unterklassen.

Eine Beobachtung, dass diese Ansicht IMO unterstützt ist, dass die konventionelle Weisheit „ungeprüfte Ausnahmen verwenden nur für Programmierer Fehler“ in der Tat ist vor allem eine Rationalisierung der rückwärts Argumentation: Es gibt keinen Code Sicherheits Grund, warum die Compiler nicht zwingen Sie sollten befassen sich mit Programmierfehlern. Doch so etwas wie NullPointerException und ArrayIndexOutOfBoundsException kann fast überall auftauchen, und wenn diese überprüft wurde, würde niemand jemals Programm in Java will. So hatten die Sprachdesigner eine machen, huh, Ausnahme für diejenigen, und sie ungeprüft zu machen. Um dies zu erklären, kamen sie mit den nach oben „nicht markiert Ausnahmen sind für Programmierer Fehler“ Geschichte.

Andere Tipps

Zitate von Effective Java 2nd Edition, Punkt 58: Verwendung überprüft Ausnahmen für erzielbare Bedingungen und Laufzeitausnahmen für Programmierfehler

  

Die Programmiersprache Java bietet drei Arten von Throwables: geprüfte Ausnahmen Runtime-Ausnahmen und Fehler . Es besteht eine gewisse Verwirrung bei den Programmierern, wann es angemessen ist jede Art von throwable zu verwenden. Während die Entscheidung nicht immer eindeutig ist, gibt es einige allgemeine Regeln, die starke Führung geben.

     

Die Grundregel fest, ob das bei der Entscheidung geprüfte Ausnahme oder ein ungeprüftes ist dies:

     
      
  • Verwenden Sie geprüfte Ausnahmen für die Bedingungen, von denen der Anrufer zugemutet werden kann erholen. Durch eine geprüfte Ausnahme werfen, zwingen Sie den Anrufer, die Ausnahme in einer catch Klausel zu umgehen oder sie nach außen zu verbreiten. Jede geprüfte Ausnahme, dass ein Verfahren zum Wurf erklärt wird, ist daher ein starker Hinweis auf die API Benutzer die zugehörige Bedingung ist ein mögliches Ergebnis der Methode der aufgerufen wird.
  •   
  • Verwenden Laufzeitausnahmen, um anzuzeigen, Programmierfehler . Die große Mehrheit der Laufzeit Ausnahmen zeigen Voraussetzung Verletzungen . Voraussetzung Verletzung ist einfach ein Fehler durch den Kunden einer API des Auftrags durch die API-Spezifikation festgelegt zu halten.
  •   

Hier ist ein Beispiel:

  • Wenn Sie eine Datei von beliebigen Namen zu lesen versucht, kann die Datei existiert nicht. Es ist nicht unbedingt ein Programmierfehler, wenn eine Datei nicht existiert (z vielleicht tat es vor, aber wurde dann versehentlich gelöscht). Kunden möchten sich davon erholen. So FileNotFoundException ist eine geprüfte Ausnahme.
  • Wenn Sie eine null Zeichenfolge als Dateinamen geben, dann IllegalArgumentException - eine andere strittige Debatte) sollte geworfen werden. Client des API sollte einen gültigen Stringwert liefern; null nicht. Soweit die API betrifft, so ist dies ein Programmierer Fehler, die leicht vermeidbar war. Beiden Ausnahmen sind Runtime-Ausnahmen.

Artikel 59: Vermeiden Sie unnötige Verwendung von geprüften Ausnahmen bietet auch zusätzliche Hinweise:

  

Checked Ausnahmen sind eine wunderbare Eigenschaft der Java-Programmiersprache. Im Gegensatz zu Rückgabecodes, sie Kraft der Programmierer mit außergewöhnlichen Bedingungen zu beschäftigen, sehr Zuverlässigkeit verbessert wird. Dies vorausgeschickt, übermäßigen Gebrauch von geprüften Ausnahmen kann eine API zu verwenden, weit weniger angenehm. Wenn eine Methode wirft eine oder mehrere Ausnahmen geprüft, den Code, der ruft die Methode die Ausnahmen in einem oder mehreren catch Blöcke behandeln muss, oder es muss erklären, dass er die Ausnahmen throws und lassen sie nach außen ausbreiten. So oder so, stellt es eine nicht-triviale Belastung für den Programmierer.

     

Die Last ist gerechtfertigt, wenn:

     
      
  • die Ausnahmebedingung nicht durch die ordnungsgemäße Verwendung der API verhindert werden, und
  •   
  • der Programmierer die API verwenden, können einige nützliche Maßnahmen ergreifen, einmal mit Ausnahme konfrontiert.
  •   
     

Es sei denn, diese beiden Bedingungen erfüllt sind, eine ungeprüfte Ausnahme ist besser geeignet.

Also hier ist eine kurze Zusammenfassung der Empfehlung von Effective Java 2nd Edition :

  • Vermeidbare Ausnahmen, die API-Benutzerfehler aufgrund passieren sollte nicht markiert .
  • Ausnahmen, die nicht angemessen behandelt werden kann, sollte auch sein nicht markiert .
  • Otherwise sollte die Ausnahme sein aktiviert .

Siehe auch

  • Effective Java 2nd Edition
    • Artikel 58: Verwenden Sie geprüfte Ausnahmen für erzielbare Bedingungen und Laufzeitausnahmen für Programmierfehler
    • Artikel 59: Vermeiden Sie unnötige Verwendung von geprüften Ausnahmen
    • Artikel 60: die Verwendung von Standard-Ausnahmen Favor
    • Artikel 61: Wurf Ausnahmen von der Abstraktion eigen
    • Artikel 62: Dokumentieren Sie alle durch jede Methode geworfen Ausnahmen

Technische Definition

Ein ungeprüfte Ausnahme ist definiert als RuntimeException und ihre Unterklassen, und JLS 11.2 Compile-Time Überprüfung von Ausnahmen

Verwandte Fragen

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