Heim > Java > javaLernprogramm > Warum werden meine Feldwerte in meinem Konstruktor nicht korrekt initialisiert?

Warum werden meine Feldwerte in meinem Konstruktor nicht korrekt initialisiert?

Barbara Streisand
Freigeben: 2024-12-02 19:11:12
Original
695 Leute haben es durchsucht

Why Are My Field Values Not Initialized Correctly in My Constructor?

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
}
Nach dem Login kopieren

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];
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage