756 Stimmen

Überprüfte und ungeprüfte Ausnahmen in Java verstehen

Joshua Bloch in " Leistungsfähiges Java " sagte, dass

Verwenden Sie geprüfte Ausnahmen für wiederherstellbare Bedingungen und Laufzeit Ausnahmen für Programmierfehler (Punkt 58 in der 2. Auflage)

Mal sehen, ob ich das richtig verstehe.

Hier ist mein Verständnis einer geprüften Ausnahme:

try{
    String userInput = //read in user input
    Long id = Long.parseLong(userInput);
}catch(NumberFormatException e){
    id = 0; //recover the situation by setting the id to 0
}

1. Handelt es sich um eine kontrollierte Ausnahme?

2. Ist RuntimeException eine ungeprüfte Ausnahme?

Hier ist mein Verständnis einer ungeprüften Ausnahme:

try{
    File file = new File("my/file/path");
    FileInputStream fis = new FileInputStream(file);   
}catch(FileNotFoundException e){

//3. What should I do here?
    //Should I "throw new FileNotFoundException("File not found");"?
    //Should I log?
    //Or should I System.exit(0);?
}

4. Könnte der obige Code nicht auch eine geprüfte Ausnahme sein? Kann ich versuchen, die Situation auf diese Weise wiederherzustellen? Kann ich das? (Anmerkung: meine 3. Frage befindet sich innerhalb der catch oben)

try{
    String filePath = //read in from user input file path
    File file = new File(filePath);
    FileInputStream fis = new FileInputStream(file);   
}catch(FileNotFoundException e){
    //Kindly prompt the user an error message
    //Somehow ask the user to re-enter the file path.
}

5. Warum tun die Menschen das?

public void someMethod throws Exception{

}

Warum lassen sie die Ausnahme aufsprudeln? Ist es nicht besser, den Fehler früher zu behandeln? Warum aufblähen?

6. Soll ich die genaue Ausnahme aufblasen oder sie mit Exception maskieren?

Im Folgenden finden Sie meine Lektüre

Wann sollte ich in Java eine geprüfte Ausnahme erstellen, und wann eine Laufzeitausnahme?

Wann sind kontrollierte und nicht kontrollierte Ausnahmen zu wählen?

8 Stimmen

Ich habe ein gutes Beispiel für eine ungeprüfte Ausnahme. Ich habe eine DataSeries Klasse, die Daten enthält, die immer in zeitlicher Reihenfolge bleiben müssen. Es gibt eine Methode zum Hinzufügen einer neuen DataPoint an das Ende einer DataSeries . Wenn mein gesamter Code im gesamten Projekt korrekt funktioniert, ist eine DataPoint sollte niemals an das Ende angefügt werden, das ein älteres Datum als das bereits vorhandene hat. Jedes Modul im gesamten Projekt ist nach dieser Binsenweisheit aufgebaut. Ich überprüfe jedoch diese Bedingung und werfe eine ungeprüfte Ausnahme, wenn sie eintritt. Und warum? Wenn es passiert, möchte ich wissen, wer das macht, und es beheben.

3 Stimmen

Um noch mehr Verwirrung zu stiften. Viele Leute haben vor ~10 Jahren geprüfte Ausnahmen befürwortet, aber die Ansicht geht heute mehr und mehr in Richtung "geprüfte Ausnahmen sind schlecht". (Ich stimme dem allerdings nicht zu)

0 Stimmen

2voto

Ozgen Punkte 1012

Kurz gesagt, Ausnahmen, die Ihr Modul oder die oben genannten Module zur Laufzeit behandeln sollen, werden als geprüfte Ausnahmen bezeichnet; andere sind ungeprüfte Ausnahmen, die entweder RuntimeException o Error .

In diesem Video werden geprüfte und ungeprüfte Ausnahmen in Java erklärt:
https://www.youtube.com/watch?v=ue2pOqLaArw

1voto

mamboking Punkte 4319

Das sind alles geprüfte Ausnahmen. Ungeprüfte Ausnahmen sind Unterklassen von RuntimeException. Die Entscheidung ist nicht, wie sie zu behandeln sind, sondern ob Ihr Code sie auslösen soll. Wenn Sie nicht wollen, dass der Compiler Ihnen mitteilt, dass Sie eine Ausnahme nicht behandelt haben, verwenden Sie eine ungeprüfte Ausnahme (Unterklasse von RuntimeException). Diese sollten für Situationen aufbewahrt werden, von denen man sich nicht mehr erholen kann, wie z. B. bei Fehlern, bei denen der Speicher voll ist, und dergleichen.

0voto

Varun Vashista Punkte 147

Geprüfte Ausnahmen :

  • Die Ausnahmen, die vom Compiler für eine reibungslose Ausführung des Programms zur Laufzeit überprüft werden, werden als "Checked Exception" bezeichnet.

  • Diese treten zur Kompilierzeit auf.

  • Wenn diese nicht ordnungsgemäß behandelt werden, führen sie zu einem Kompilierzeitfehler (Not Exception).

  • Alle Unterklassen der Klasse Exception außer RuntimeException sind Checked Exception.

    Hypothetisches Beispiel - Angenommen, Sie verlassen Ihr Haus für die Prüfung, aber wenn Sie überprüfen, ob Sie Ihr Hall Ticket zu Hause genommen haben (Kompilierzeit), dann wird es kein Problem in der Prüfungshalle geben (Laufzeit).

Ungeprüfte Ausnahme :

  • Die Ausnahmen, die vom Compiler nicht geprüft werden, heißen Unchecked Exceptions.

  • Diese treten zur Laufzeit auf.

  • Wenn diese Ausnahmen nicht richtig behandelt werden, führen sie nicht zu einem Kompilierzeitfehler. Aber das Programm wird zur Laufzeit vorzeitig beendet.

  • Alle Unterklassen von RunTimeException und Error sind ungeprüfte Ausnahmen.

    Hypothetisches Beispiel - Angenommen, Sie befinden sich in Ihrem Prüfungssaal, aber in Ihrer Schule ist ein Feuer ausgebrochen (d. h. zur Laufzeit), so dass Sie zu diesem Zeitpunkt nichts tun können, aber vorher (zur Kompilierzeit) Vorkehrungen getroffen werden können.

-1voto

Slawomir Punkte 2868

Wenn jemand einen weiteren Beweis für die Abneigung gegen geprüfte Ausnahmen sucht, kann er die ersten Absätze der beliebten JSON-Bibliothek lesen:

"Obwohl es sich um eine geprüfte Ausnahme handelt, ist sie selten wiederherstellbar. Die meisten Aufrufer sollten diese Ausnahme einfach in eine ungeprüfte Ausnahme verpacken und erneut auslösen: "

Warum in aller Welt sollte jemand die Entwickler dazu bringen, die Ausnahme weiterhin zu überprüfen, wenn wir sie stattdessen "einfach einpacken" sollten? lol

http://developer.Android.com/reference/org/json/JSONException.html

-2voto

shawnhcorey Punkte 3487

Alle Ausnahmen müssen als Ausnahmen geprüft werden.

  1. Ungeprüfte Ausnahmen sind unbeschränkte Gotos. Und uneingeschränkte Gotos werden als schlecht angesehen.

  2. Ungeprüfte Ausnahmen unterbrechen die Kapselung. Um sie korrekt zu verarbeiten, müssen alle Funktionen im Aufrufbaum zwischen dem Thrower und dem Catcher bekannt sein, um Fehler zu vermeiden.

  3. Ausnahmen sind Fehler in der Funktion, die sie auslöst, aber keine Fehler in der Funktion, die sie verarbeitet. Der Zweck von Ausnahmen besteht darin, dem Programm eine zweite Chance zu geben, indem die Entscheidung, ob es sich um einen Fehler handelt oder nicht, auf einen anderen Kontext verschoben wird. Nur in diesem anderen Kontext kann die richtige Entscheidung getroffen werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X