Warum sollte in Java eine int-Variable mit 0 initialisiert werden, wenn sie bei der Deklaration standardmäßig nur 0 zugewiesen wird?

8

Wozu dient es?

Lies einfach ein Beispiel in einem Buch, wo der Autor das getan hat.

%Vor%     
Serenity 16.05.2010, 10:55
quelle

3 Antworten

17

Die automatische Zuweisung auf Null gilt nur für Mitglieder, nicht für lokale Variablen. Wenn es sich um eine lokale Variable handelt und die = 0 weggelassen wird, hat diese Variable keinen Wert, nicht einmal Null. Wenn Sie versuchen, den Wert vor der Zuweisung zu verwenden, führt dies zu einem Kompilierungsfehler. Dieser Code versucht beispielsweise, eine nicht initialisierte lokale Variable zu verwenden:

%Vor%

und erzeugt diesen Kompilierfehler:

%Vor%

Während dieser Code mit einem Member arbeitet und null ausgibt:

%Vor%

Für Mitglieder tendiere ich dazu, null explizit zuzuweisen, wenn mein Code die Tatsache verwendet, dass der anfängliche Zalue Null ist, und die Zuweisung weglässt, wenn mein Code nicht den Anfangswert verwendet (wenn er z. B. in der Konstruktor oder anderswo). Das Ergebnis ist das gleiche oder so, es ist nur ein Stilproblem.

    
Mark Byers 16.05.2010, 10:57
quelle
4

Es ist expliziter; Manche Leute mögen. Beachten Sie, dass dies nur für Felder gilt - lokale Variablen müssen initialisiert werden; Es gibt keine Standardwerte.

    
Artefacto 16.05.2010 10:56
quelle
2

Die Java-Kompilierung und die Laufzeit unterscheiden sich.

Beim Ausführen des Programms werden alle Klassen mit Klassenladeprogrammen geladen, und sie tun Folgendes:

Dies geschieht, wenn class zum ersten Mal verwendet wird . Ihre Ausführungsreihenfolge wird durch ihre Reihenfolge im Code definiert.

  • statische Blöcke ausführen

    %Vor%
  • initialisieren statische Variablen

    public static int number;

Dies wird auf Null 0 initialisiert;

Die nächste initialisierte Gruppe von Initialisierungen ist Erstellen eines Objekts . Ihre Ausführungsreihenfolge wird durch ihre Reihenfolge im Code definiert.

  • renne nicht statischen Block

    %Vor%
  • initialisiert nicht statische (Instanz-) Variablen

    public int instance_number;

Und das ist wann und warum gibt es Standard-Initialisierung! Dies gilt nicht für Methoden, da sie keinen ähnlichen Mechanismus wie Klassen haben. Im Grunde bedeutet dies, dass Sie EXPLICITLY für jede Methodenvariable initialisieren müssen.% Co_de%

    
Leni Kirilov 16.05.2010 11:25
quelle

Tags und Links