Ich habe einige Dinge über die Behandlung von Ausnahmen in Java gelesen, um besseren Code schreiben zu können. OK, ich gebe zu, ich habe mich schuldig gemacht; ich habe zu viele try-catch{}-Blöcke verwendet, ich habe ex.printStackTrace()
in den Fängen, nicht einmal mit einem richtigen Logger (eigentlich der System.out
y System.err
wurden umgeleitet zu einer PrintWriter
so wurde ein Protokoll erstellt). Nach ein paar Stunden des Lesens befinde ich mich jedoch an einem seltsamen Ort: dem Unbekannten. Wenn die Ausnahmen so konzipiert sind, dass sie Informationen über abnormale Flusszustände weitergeben, woher weiß man dann, WO die richtige Ebene ist, um etwas mit dieser Information zu tun?
Wenn beispielsweise ein Datenbankfehler auftritt, sollte man dann einen Nullwert oder einen Fehlercode zurückgeben oder die Ausnahme auslösen? Wenn die Ausnahme ausgelöst wird, WO sollte diese Ausnahme behandelt werden? Ich verstehe, dass es keinen Sinn macht, eine Ausnahme zu protokollieren, wenn man nichts dagegen tun kann. In GUI-Anwendungen könnte das jedoch leicht die GUI zerstören (ich verwende SWT und habe das schon zu oft gesehen), selbst für den Fall, dass die menuShown()
Methode (ein ArrayIndexOutOfBounds
Ausnahme wird die Anwendung geschlossen, wenn sie nicht behandelt wird). Das Beispiel könnte ewig so weitergehen, aber hier ist die Zusammenfassung der Fragen:
- Hat die übermäßige Verwendung von try-catch() negative Auswirkungen auf die Leistung?
- Ist es besser, bestimmte Ausnahmetypen zu verwenden? Was ist, wenn ich eine der folgenden Ausnahmen nicht der möglichen X Arten von Ausnahmen, die auftreten können, nicht abzufangen?
Ehrlich gesagt, habe ich in 2-3 Jahren gerade einmal 10% der Java-Standardausnahmen kennengelernt und verwendet. Ja, jemand hat gesagt, dass der Aufrufer, wenn er nicht weiß, wie er mit den geworfenen Ausnahmen umgehen soll, NICHT das RECHT haben sollte, die werfende Methode aufzurufen. Ist das richtig? - Ich habe diesen Artikel von Anders Hejlsberg und sagt, dass geprüfte Ausnahmen schlecht sind. Sollte das darauf hindeuten, dass es in manchen Fällen ratsam ist, Ausnahmen zu schlucken?
- Ein Bild sagt mehr als 1000 Worte; ich denke, einige Beispiele werden hier sehr hilfreich sein hier.
Ich weiß, dass das Thema ewig währt, aber eigentlich freue ich mich darauf, ein mittelgroßes Projekt mit 150 Klassen zu überprüfen und dabei Ihre Ratschläge zu nutzen. Vielen Dank dafür.