Warum musst du nicht explizit deklarieren, dass du einige eingebaute Ausnahmen in Java werfen kannst?

7

Ich habe mit Integer.parseInt() bemerkt, dass Sie es nicht mit einem try catch einkreisen müssen oder dass die Methode eine Ausnahme auslösen kann, obwohl sie ein NumberFormatException "wirft".

Warum muss ich das NumberFormatException nicht explizit abfangen oder angeben, dass meine Methode es auslöst?

    
Omar Kooheji 09.02.2009, 16:46
quelle

4 Antworten

16

Weil das eine "Laufzeit" -Ausnahme ist.

RuntimeExceptions werden verwendet, um Programmierprobleme zu identifizieren (die ein guter Programmierer vermeiden könnte), während

Überprüfte Ausnahmen dienen zur Identifizierung von Umgebungsproblemen (die nicht vermieden werden konnten, egal wie gut Sie programmieren, ein Server ist zum Beispiel ausgefallen)

Sie können mehr über hier

lesen

Es gibt tatsächlich drei Arten von Ausnahmen , nur eine davon sollte behandelt werden (die meiste Zeit)

    
OscarRyz 09.02.2009, 16:50
quelle
7
%Vor%

Siehe Thinking in Java für eine gute Erklärung der Checked- und Unchecked-Ausnahmen.

Einige halten die Idee der geprüften Ausnahmen für ein gescheitertes Experiment. Zum Beispiel verwenden sowohl Spring als auch Hibernate ungeprüfte Ausnahmen und umhüllen oft geprüfte Ausnahmen in unkontrollierten Versionen.

    
toolkit 09.02.2009 16:53
quelle
6

NumberFormatException erweitert RuntimeException, Sie müssen nicht explizit alles behandeln, was von RuntimeException erbt.

Andere RuntimeExceptions sind Dinge wie NullPointerException und IndexOutOfBoundsException. Dies sind Dinge, die der Programmierer vermeiden kann, und diese Art von Ausnahmen zu versuchen / zu fangen, würde ziemlich überladenen Code erzeugen.

    
bobwienholt 09.02.2009 16:49
quelle
2

Nur ein kurzer Kommentar zu Toolkits Antwort.

Der Grund, warum die aktivierten Ausnahmen ein Problem sind, ist, dass sie zu Code wie diesem führen:

%Vor%

Das ist der schlimmste Fall. Vor allem protokollieren sie nicht, dass sie die Ausnahme abfangen. Dies passiert sehr oft und wird fast durch sehr dumme checked Ausnahmen wie die auf Thread.sleep () ausgelöst, es wirft InterruptedException, die unbedingt abgefangen werden müssen, aber 99% der Zeit ist es dir egal, ob du eine hast oder nicht .

Im obigen Fall kommt hinzu, dass die Leute dazu neigen, einfach "Ausnahme" zu fangen, wenn mehr als einer geworfen wird. Das bedeutet, dass selbst wenn eine kritische ungeprüfte Ausnahme ausgelöst wird, diese abgefangen und ignoriert wird, sodass es praktisch unmöglich ist, das Problem zu finden.

Mehr als einmal war ich in Teams, die ungefähr einen Monat damit zubringen mussten, auf diese Weise verborgene Fehler ausfindig zu machen.

Es ist ein gutes Konzept, das schrecklich wird, wenn man hinzufügt, dass Menschen es sind, die es verantwortungsvoll umsetzen müssen.

    
Bill K 09.02.2009 18:36
quelle

Tags und Links