Heim >Java >javaLernprogramm >Warum lehnen Entwickler geprüfte Ausnahmen in Java ab?

Warum lehnen Entwickler geprüfte Ausnahmen in Java ab?

Susan Sarandon
Susan SarandonOriginal
2024-12-05 09:51:12695Durchsuche

Why Do Developers Oppose Checked Exceptions in Java?

Gegen geprüfte Ausnahmen

Viele Jahre lang konnte ich keine zufriedenstellende Antwort auf die folgende Frage bekommen: Warum sind manche Entwickler so dagegen? auf geprüfte Ausnahmen? Ich habe viele Gespräche geführt, Blogbeiträge gelesen und die Meinungen von Bruce Eckel gelesen (der sich als erster gegen geprüfte Ausnahmen ausgesprochen hat).

Ich schreibe gerade neuen Code und achte sehr darauf, wie Ausnahmen behandelt werden. Ich versuche, die Perspektive der „Wir mögen keine geprüften Ausnahmen“-Menge zu verstehen, aber ich verstehe sie immer noch nicht.

Jedes Gespräch, das ich jemals geführt habe, endete mit der gleichen ungelösten Frage ... Lassen Sie mich näher darauf eingehen:

Im Allgemeinen (durch das Design von Java),

  • Fehler betreffen Dinge, die niemals abgefangen werden sollten (VM Allergisch gegen Erdnüsse, jemand hat aus Versehen eine Dose Erdnüsse darauf gestreut)
  • Laufzeitausnahmen gelten für Dinge, die der Programmierer falsch gemacht hat (der Programmierer ist mit einem Array außerhalb der Grenzen gegangen)
  • Ausnahmen (Ausnahme von Ausnahmen) Ja Wird für Dinge verwendet, die außerhalb der Kontrolle des Programmierers liegen (die Festplatte ist beim Schreiben einer Datei im Dateisystem voll, das Limit des Prozesses für die Anzahl der Dateihandles wurde erreicht, die Datei kann nicht mehr geöffnet werden)
  • Das Throwable Das Objekt ist nur das übergeordnete Element aller Ausnahmetypen.

Ein Argument, das ich oft höre, ist, dass der Entwickler beim Auftreten einer Ausnahme nur das Programm beenden muss.

Ein weiteres häufiges Argument, das ich höre, ist, dass geprüfte Ausnahmen die Umgestaltung von Code erschweren.

Für das „Ich höre auf“-Argument müssen Sie auch dann noch eine sinnvolle Fehlermeldung anzeigen, wenn Sie aufhören. Wenn Sie die Fehlerbehandlung nur hinauszögern, werden Ihre Benutzer nicht allzu glücklich sein, wenn das Programm ohne einen klaren Grund für das Beenden beendet wird.

Für die Zielgruppe „Es macht Refactoring schwierig“ deutet dies darauf hin, dass nicht die geeignete Abstraktionsebene gewählt wurde. Anstatt eine Methode zum Auslösen einer IOException zu deklarieren, sollte die IOException in eine Ausnahme konvertiert werden, die besser für das Geschehen geeignet ist.

Ich finde es nicht toll, Mains „catch(Exception)“ (oder in manchen Fällen „catch(Throwable)“) einzuschließen, was sicherstellt, dass das Programm ordnungsgemäß beendet wird, aber ich fange immer die spezifischen Ausnahmen ab, die ich benötige. Dadurch ist es möglich Ich möchte zumindest eine richtige Fehlermeldung anzeigen

Die Frage, die die Leute nie beantworten, ist:


Wenn Sie eine RuntimeException
-Unterklasse anstelle einer Exception
-Unterklasse auslösen, woher wissen Sie dann, was
abfangen soll?



Wenn die Antwort darin besteht, eine Ausnahme abzufangen, behandeln Sie Programmiererfehler immer noch auf die gleiche Weise wie Systemausnahmen. Das kommt mir falsch vor.


Wenn Sie Throwable abfangen, behandeln Sie Systemausnahmen und VM-Fehler (und ähnliche Fehler) immer noch auf die gleiche Weise. Das kommt mir falsch vor.


Wenn die Antwort darin besteht, nur Ausnahmen abzufangen, von denen Sie wissen, dass sie ausgelöst werden, woher wissen Sie dann, welche Ausnahmen ausgelöst wurden? Was passiert, wenn Programmierer X eine neue Ausnahme auslöst und vergisst, sie abzufangen? Meiner Meinung nach ist das gefährlich.


Ich würde sagen, dass die Meldung, die den Stack-Trace anzeigen würde, falsch ist. Denken das nicht auch Leute, die keine geprüften Ausnahmen mögen?


Wenn Sie also keine aktivierten Ausnahmen mögen, können Sie erklären, warum nicht, und bitte die unbeantwortete Frage beantworten.


Ich suche nicht nach Ratschlägen, wann man eines der beiden Modelle verwenden sollte, sondern nach warum Leuten, die von RuntimeException aus erweitern, aber nicht von Exception, und/oder der Grund, warum sie die RuntimeException erneut auslösen, nachdem sie die Ausnahme abgefangen haben, anstatt Würfe zur Methode hinzuzufügen. Ich würde gerne die Beweggründe der Leute verstehen, die überprüfte Ausnahmen nicht mögen.

Das obige ist der detaillierte Inhalt vonWarum lehnen Entwickler geprüfte Ausnahmen in Java ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn