Lokale Variablen sind viel einfacher zu überprüfen, dass eine Variable immer in einem relativ begrenzten Umfang initialisiert wird, wenn Sie die Codepfade bestimmen können. Es bringt es nicht immer richtig, aber es macht einen guten Job, wenn der Code nicht verwirrend ist.
final
Felder müssen ebenfalls initialisiert werden, allerdings nur einmal. Wenn ein Konstruktor einen anderen aufruft, kann es verwirrt werden.
Für nicht abschließende Felder ist es sehr schwierig sicherzustellen, dass ein Feld initialisiert wird, bevor es für alle möglichen Codepfade verwendet wird. z.B. Wie kann sichergestellt werden, dass ein setter
immer vor einem aufgerufen wird, wenn diese Anrufe von einer anderen Klasse gemacht werden, die in der Zukunft geändert werden könnte.
Stattdessen hinterlässt die JVM Standardwerte und macht es zu Ihrem Problem, um das Sie sich kümmern müssen.
Siehe [Jon Skeets Antwort] (http://stackoverflow.com/a/1560704/3788176) auf eine verwandte Frage. –
@AndyTurner Gut, dass Sie dort einen Link setzen. Ich bin fast dafür und für jede gute Frage/Antwort hier, eine Antwort kam von Jon ;-) – GhostCat