Der zitierte Text lautet:
"Das Verlassen auf solche Standardwerte wird jedoch allgemein als schlechter Programmierstil angesehen."
Zynisch: "Es wird allgemein angenommen, dass" ist oft eine Art zu sagen, dass der Autor nicht versucht hat, eine maßgebliche Quelle für die präsentierte Aussage zu finden.
In diesem Fall ist die Behauptung eindeutig fraglich. Beweis: 5 von 5 Java Style Guides in der Stichprobe sagen nichts darüber aus, ob Sie sich auf Standardwerte verlassen sollten oder sollten:
(Beachten Sie, dass meine Methode für die Stichprobe darin bestand, die ersten 5 verschiedenen Google-Suchtreffer nach "Java Style Guide" zu untersuchen. Dann habe ich jedes Dokument nach "Standard" durchsucht. Dies ist keine gründliche Analyse, aber es dient dazu, meinen Standpunkt zu verdeutlichen. )
OK. Hilft es also wirklich bei der Lesbarkeit von Java-Code?
Das ist umstritten.
Einerseits kann ein unerfahrener Java-Programmierer, der nichts über die Standardinitialisierung gelernt hat, verwirrt darüber sein, woher die Nullen oder Nullen kommen. Wenn sie sich jedoch die Mühe machen, nach einer expliziten Initialisierung zu suchen und feststellen, dass es keine gibt, sollte dies ausreichen, um sie zu veranlassen, ein Lernprogramm oder ein Buch zu lesen, um Informationen zur Standardinitialisierung zu erhalten. (Sie würden hoffen!)
Andererseits erwarten wir normalerweise nicht, dass unerfahrene Java-Programmierer Produktionscode-Basen beibehalten. Für einen erfahrenen Java-Programmierer verbessert eine redundante Initialisierung die Lesbarkeit nicht. Es ist (bestenfalls) Lärm.
Meiner Meinung nach ist das einzige, was durch eine redundante Initialisierung eines Feldes erreicht wird, einem zukünftigen Leser Ihres Codes zu signalisieren, dass Sie über den Anfangswert nachgedacht haben. (Wie @GhostCat es ausdrückte, kommuniziert die Standardinitialisierung keine Absicht.)
Aber umgekehrt, wenn ich dieser Leser wäre, würde ich dem Denken des Code-Autors nicht unbedingt vertrauen. Der Wert dieses "Signals" ist also ebenfalls fraglich.
Was ist mit Zuverlässigkeit?
In Java macht es keinen Unterschied. Die JLS gibt an, dass Standardinitialisierung nicht für Felder auftreten. Umgekehrt ist es für lokale Variablen ein Kompilierungsfehler, zu versuchen, eine Variable zu verwenden, die nicht definitiv initialisiert wurde.
Kurz gesagt, das Laufzeitverhalten einer nicht explizit initialisierten Variablen ist vollständig vorhersehbar.
Im Gegensatz dazu ist das Verhalten in Sprachen wie C oder C ++, in denen Variablen möglicherweise nicht initialisiert werden, nicht angegeben und kann zu Abstürzen und Verhaltensunterschieden auf verschiedenen Plattformen führen. Die Argumentation, Variablen immer explizit zu initialisieren, ist hier viel stärker.
Was ist mit Leistung?
Es sollte keinen Unterschied machen. Der JIT-Compiler sollte in der Lage sein, eine redundante Initialisierung und eine Standardinitialisierung als gleich zu behandeln.
private int count = 0;
ist Code, der nichts tut, und Code, der nichts tut, ist Unordnung. Es ist wie das Importieren von Klassen aus java.lang oder das Deklarieren einer Klasse mitextends Object
.