2016-07-28 5 views
0

In der JAVA-Welt haben Feldvariablen Standardwerte, wenn Sie sie nicht initialisieren, während lokale Variablen dies nicht tun.JAVA Standardwert Design Grund

Ich habe viel überlegt und gesucht, aber ich verstehe es immer noch nicht. Warum gestaltet JAVA World Design das? Übrigens, ich denke, es hat etwas mit Haufen und Haufen zu tun.

+1

Siehe [Jon Skeets Antwort] (http://stackoverflow.com/a/1560704/3788176) auf eine verwandte Frage. –

+0

@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

Antwort

1

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.

0

Nun, es ist meiner Meinung nach sehr gutes Design. Der Compiler versucht zu überprüfen, ob der Programmierer keine Fehler gemacht hat. Die lokale Variable sollte manuell initialisiert werden, um unerwartete Probleme zu vermeiden, da sie normalerweise verwendet wird, um einige zusätzliche Berechnungen oder Aktionen durchzuführen, und mit dem Standardwert kann es sehr schwierig sein, einen solchen Fehler in der Zukunft zu verfolgen. Es liegt in der Verantwortung des Programmierers, die lokale Variable ordnungsgemäß zu initialisieren und in einem kurzen Codeblock zu verwenden.