Persönlich mag ich es nicht für Mitgliedsfelder, die einen Wert im Konstruktor nehmen. Es gab eine Zeit, als ich dachte, es wäre einfach schön, explizit zu sein, aber es gibt tatsächlich einen Bytecode-Unterschied zwischen der expliziten Zuweisung eines Feldes zu null oder dem Feld, das den Standardwert annimmt.
Auch für Felder, die als Null beginnen (und dann irgendwann nach der Initialisierung einen Wert erhalten), bin ich kein großer Fan von ihnen. Es hebt normalerweise nur Missverständnisse von dem Entwickler hervor, der das getan hat.
Die try-catch Relevanz ist in Fällen wie folgt aus:
Reader r = null;
try {
r = ...;
//do something that could throw an exception
} finally {
if (r != null) { //wouldn't compile without assignment to null
r.close();
}
}
Da r
eine lokale Variable hier ist es Wert muss, bevor es verwendet werden kann, so dass die Zuordnung erforderlich. Wenn die Zuweisung zu NULL im selben Codepfad stattfindet wie die nachfolgende Neuzuweisung und/oder Verwendung, ist dies wahrscheinlich nur eine irreführende Redundanz.
Ich denke, das ist eine gültige Frage. +1 um den Downvote auszugleichen. –
Das passiert, wenn der Downvoter keinen Kommentar hinterlässt. –
Einfach weil in vielen Fällen sonst der Code einfach nicht kompiliert wird. Nun, warum die Java-Spezifikationen dies vorschreiben, ist eine andere Frage als +1 an MForster, die auf die genaue Compiler-Fehlermeldung hingewiesen hat. Beachten Sie, dass Sie nicht einmal eine gültige * .java * -Datei kompilieren müssen, um diese Fehlermeldung zu erhalten. Zum Beispiel: IntelliJ IDEA (erstaunliche Java-IDE) warnt Sie in Echtzeit vor Ihrem ** Fehler **, sogar bei einer partiellen AST (das heißt: einer partiellen .java-Datei, die Sie selbst nicht kompilieren konnten, weil sie unvollständig ist). – SyntaxT3rr0r