Warum Shadowing die Feldinitialisierung beeinträchtigt
Ihre Klasse verfügt über Felder mit dem Namen „capacity“ und „elements“, die Sie im Konstruktor zu initialisieren versuchen. Allerdings werden die Werte, die Sie während der Erstellung festlegen, bei der Abfrage von Feldwerten nicht berücksichtigt. Dieses Verhalten ist auf ein Konzept namens Shadowing zurückzuführen.
Shadowing tritt auf, wenn zwei Variablen denselben Namen haben, aber in unterschiedlichen Bereichen existieren. In Ihrem Konstruktor deklarieren Sie lokale Variablen mit den Namen „Capacity“ und „Elements“. Diese lokalen Variablen haben Vorrang vor den entsprechenden Feldern im Gültigkeitsbereich des Konstruktors und überschatten diese effektiv.
public StringArray() { int capacity = 10; // Local variable shadows field String[] elements; // Local variable declaration without initializer elements = new String[capacity]; // Initializes local variable, not field }
Infolgedessen initialisiert die Zuweisung zur lokalen Kapazitätsvariablen diese Variable und nicht das Feld. Auch wenn Sie die Elementvariable initialisieren, wirkt sich ihre Zuweisung nicht auf das Feld aus, da die lokale Variable Vorrang hat. Daher bleibt die Feldkapazität auf ihrem Standardwert (0) und Elemente werden auf Null gesetzt.
Um dieses Problem zu beheben, entfernen Sie die lokalen Variablendeklarationen im Konstruktor, damit die Namen „Kapazität“ und „Elemente“ auf die verweisen können Instanzvariablen.
public StringArray() { // Remove local variable declarations this.capacity = 10; this.elements = new String[capacity]; }
Wenn alternativ die Beibehaltung der Konstruktorparameter erforderlich ist, verwenden Sie qualifizierte Namen, um explizit auf die Instanzvariablen zu verweisen.
public StringArray(int capacity) { this.capacity = capacity; // Initializes the field using qualified name }
Das obige ist der detaillierte Inhalt vonWarum werden meine Feldwerte in meinem Konstruktor nicht korrekt initialisiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!