Verwirrung über die Feldinitialisierung im Java-Konstruktor
Entwickler können auf Situationen stoßen, in denen in einem Klassenkonstruktor deklarierte und initialisierte Felder Null- oder Standardwerte zurückgeben, wenn abgefragt. Dieses Verhalten ergibt sich aus dem Konzept des Shadowing in Java.
Shadowing mit lokalen Variablen
Wenn lokale Variablen innerhalb eines Konstruktors deklariert werden, besitzen sie dieselben Namen wie Instanzvariablen. Java priorisiert jedoch lokale Variablen innerhalb ihres Gültigkeitsbereichs und überschattet die Instanzvariablen. Betrachten Sie das folgende Beispiel:
public class Sample { private String[] elements; private int capacity; public Sample() { int capacity = 10; String[] elements; elements = new String[capacity]; } }
In diesem Konstruktor wird die Kapazität der lokalen Variablen auf 10 initialisiert, die Kapazität der Instanzvariablen bleibt jedoch nicht initialisiert, was zu einem Standardwert von 0 führt. Ähnlich verhält es sich mit den Elementen der lokalen Variablen Eine Array-Referenz zugewiesen, aber die Elemente der Instanzvariablen bleiben null.
Schattierung mit Konstruktor Parameter
Konstruktorparameter können auch gleichnamige Instanzvariablen spiegeln. Die Deklaration des Parameters hat Vorrang, sodass kein direkter Zugriff auf die Instanzvariable möglich ist. Um auf die Instanzvariable zu verweisen, verwenden Sie den qualifizierten Namen mit diesem primären Ausdruck, wie in:
public Sample(int capacity) { this.capacity = capacity; }
Empfehlung
Um Verwirrung zu vermeiden, ist dies eine bewährte Vorgehensweise nach Möglichkeit eindeutige Namen für lokale Variablen, Konstruktorparameter und Instanzvariablen zu verwenden. Dies verhindert versehentliches Abschatten und stellt sicher, dass Felder wie vorgesehen initialisiert werden.
Das obige ist der detaillierte Inhalt vonWarum geben meine Java-Konstruktorfelder Null- oder Standardwerte zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!