Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich sitze gerade vor einem mächtigen Problem: eine Methode bekommt ein Argument, nennen wir es x.
x darf nicht null sein.
Wenn nun diese Methode ein x = null bekommt, welche Exception soll sie da werfen? NullPointer oder IllegalArgument?
Bin für IllegalArgumentException weil es ja primär um das übergebene Argument geht.
Du könntest doch aber in einem zweiten catch-Block trotzdem noch eine NullPointerException abfangen.
Einerseits ist es so, dass es ungültiges Argument übergeben wurde, jedoch ist es auf der anderen Seite so, dass Du null übergeben bekommst und dies im weiterem Programmverlauf ein Fehler darstellt.
Naja, ich denke trotzdem, dass du gleich das illegale Argument abfangen solltest, denn warum sollte man im weiteren Programmverlauf mit Dingen arbeiten, die Probleme verursachen können. Wenn du gleich die IllegalArgumentException auffängst, gehst du dem schon von Anfang an aus dem Weg.
ich wollte gerade dasselbe fragen und bin über die suche auf diesen thread gestoßen. da dieser schon 2 jahre alt ist, gibts ja vielleicht ein paar neue meinungen dazu.
die Exception soll doch sicherlich am Start eigenständig geworfen werden,
da passt nur IllegalArgumentException,
throw NullPointerException führt in die Irre, da ja kein fehlerhafter Zugriff auftrat
NullPointerException ist für mich eine Systemexception,
die idealerweise überhaupt nur bei null.operation() auftritt
ich sehs eigentlich eh auch so. wie man am umfrageergebnis sieht, ists aber nicht so eindeutig.
bei mir wird ansonsten eine NPE aber auch nur bei aufrufen à la null.operation() geworfen, da ich ja mitten in einer methode nicht auf null-überprüfe, außer eine methode kann null returnieren, aber dann muss ich diesen fall ja entsprechend behandlen und es macht wohl wenig sinn, selbst eine NPE zu werfen.
Ich finde die NullPointerException schon deshalb unangebracht, weil sie suggeriert, dass das Objekt, dessen Eigenschaften und Methoden aufgerufen werden sollen, null ist. Das führt in dem Kontext nur zu Verwirrung.
[EDIT]:
Upps,sollte man den ganzen Thread VORHER lesen, Slater hat ja schon sinngemäß das Gleiche geschrieben...
Ich persönlich werfe nie, also nie absichtlich, NPEs. Der Grund ist einfach: Ich will keine NPEs fangen weil diese andere Programmierfehler verschlucken könnten. Für mich sind NPEs echten Programmierfehlern vorbehalten. Vergesse ich einen Wert gegen null zu testen gibt es eine NPE - vergesse ich es nicht aber der Wert darf nicht null sein gibt es eine IllegalArgumentException (o.Ä.). Die IAE kann ich fangen - verschlucke dabei aber keine anderen Programmierfehler.
Dadurch kann ich mir bei meinem eigenen Code immer sicher sein das ich einen Programmierfehler habe wenn er eine NPE wirft.
Also ich denke es sprichts nichts dagegen eine NPE zu werfen.
Denn entweder sind null Parameter erlaubt, oder es wird spaeter doch eh eine NPE geworfen.
also als Beispiel:
Aha, hier weis ich sofort, dass foo nicht null sein darf, weil es dann spaeter im Programm einen Fehler gibt.
Also meine Schlussfolgerung: Dem werfen einer NPE steht eigentlich nichts im Wege. Aber es gilt die Regel: Fehler immer so frueh wie moeglich zu erkennen und mit Exceptions um sich werfen. Denn je laenger man damit wartet, desto schwieriger wird es den Fehler nachzu vollziehen.
Ausserdem, eine NPE faengt man normalerweise auch nicht explizit (also man macht doch kein try catch fuer eine NPE).