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 neuenDataPoint
an das Ende einerDataSeries
. Wenn mein gesamter Code im gesamten Projekt korrekt funktioniert, ist eineDataPoint
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
Verwandt: techblog.bozho.net/?p=316
12 Stimmen
Es ist nur dann sinnvoll, eine Exception zu behandeln, wenn Sie etwas Nützliches damit zu tun haben, andernfalls sollten Sie sie dem Aufrufer überlassen. Es zu protokollieren und so zu tun, als wäre es nicht passiert, ist normalerweise nicht sinnvoll. Sie einfach wieder auszulösen ist sinnlos. Das Verpacken in eine RuntimeException ist nicht so nützlich, wie manche denken, es führt nur dazu, dass der Compiler aufhört, Ihnen zu helfen. (IMHO)
52 Stimmen
Wir sollten aufhören, die umfassend irreführenden Begriffe von angekreuzt/unangekreuzt Ausnahmen. Sie sollten aufgerufen werden Kontrolle erforderlich gegen check-not-mandated Ausnahmen.
3 Stimmen
Ich habe auch abt ur 5. Punkt public void method_name throws Exception{} warum einige Leute tun, dass gedacht?
0 Stimmen
Ein ausgezeichneter Artikel zu diesem Thema: weblogs.java.net/blog/carcassi/archive/2009/09/25/
0 Stimmen
FileNotFoundException ist eine geprüfte Ausnahme und keine ungeprüfte Ausnahme, wie Sie in Q2 durch das Posten eines Codes erwähnt haben
0 Stimmen
Das steht in der Java-Dokumentation: docs.oracle.com/javase/tutorial/essential/exceptions/
0 Stimmen
@BlessedGeek. Ich denke, die Terminologie geprüfte/ungeprüfte Ausnahmen macht durchaus Sinn. Der Compiler ist derjenige, der prüft, ob es eine Möglichkeit für eine Ausnahme gibt.
0 Stimmen
Der Link von Duncan Jones ist tot, hier ist ein funktionierender Link: community.oracle.com/blogs/carcassi/2009/09/25/