Heim > Java > javaLernprogramm > Warum geben meine Java-Konstruktorfelder Null- oder Standardwerte zurück?

Warum geben meine Java-Konstruktorfelder Null- oder Standardwerte zurück?

Patricia Arquette
Freigeben: 2024-12-04 20:33:18
Original
857 Leute haben es durchsucht

Why Are My Java Constructor Fields Returning Null or Default Values?

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

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

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!

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