2013-03-01 25 views
8

Ich habe eine Verwirrung über die Initialisierung von Variablen in Java. Wie ich es verstehe, erhalten Klassenvariablen eine Standardinitialisierung, während lokale Variablen nicht standardmäßig initialisiert werden. Wenn ich jedoch ein Array innerhalb einer Methode mit dem new-Schlüsselwort erstelle, wird es standardmäßig initialisiert. Gilt das für alle Objekte? Wird mit dem neuen Schlüsselwort ein Objekt initialisiert, unabhängig davon, ob es sich um eine Klassenvariable oder eine lokale Variable handelt?Standard-Initialisierung in Java

+1

Haben Sie es ausprobieren, um zu sehen, was passiert? –

+0

Ja, ich habe es mit anderen Objekten versucht und das scheint zu passieren, weshalb ich die Frage –

Antwort

2

Gilt das für alle Objekte? Wird mit dem new-Schlüsselwort ein -Objekt initialisiert, unabhängig davon, ob es sich um eine Klassenvariable oder eine lokale Variable handelt?

Wenn Sie new Schlüsselwort verwenden. es bedeutet, dass Sie Ihr Objekt initialisiert haben. Es spielt keine Rolle, ob es auf Methoden- oder Instanzenebene deklariert wird.

public void method(){ 
Object obj1;// not initialized 
Object obj2 = new Object();//initialized 
} 
+1

Danke für diese Klarstellung. Das ist, was ich gesucht habe. –

+0

@BM Sie sind willkommen :) – PermGenError

5

Nach weiteren Untersuchungen werden Primitive immer nur dann auf den Standardwert initialisiert, wenn sie Membervariablen sind, lokale Variablen werden einen Kompilierungsfehler auslösen, wenn sie nicht initialisiert werden.

Wenn Sie ein Array von Primitiven erstellen, werden diese alle standardmäßig initialisiert (dies gilt sowohl für lokale Arrays als auch für Member-Arrays), ein Array von Objekten, die Sie jeweils instanziieren müssen.

+0

gestellt habe. Ich bin mir nicht sicher. Wenn ich ein primitives Element in einer Methode deklariere, wird es standardmäßig nicht initialisiert.Wenn ich versuche, es ohne Initialisierung zu verwenden, erhalte ich einen Kompilierungsfehler. –

+0

Ja, Compiler spucken "diese Variable wurde möglicherweise nicht initialisiert" Nachrichten für nicht initialisierte lokale Primitive –

+0

@ Jeff Efforthorne wirklich? Ich habe keinen Java-Compiler vor mir, um das zu testen, aber ich dachte Primitive würden immer Standardwerte erhalten, wenn sie deklariert werden, egal wo. –

27

Von Java Language Specification

Jede Klassenvariable, Instanzvariablen oder Arraykomponenten wird mit einem Standardwert initialisiert, wenn sie erstellt wird (§15.9, §15.10):

  • Für den Typ Byte ist der Standardwert Null, dh der Wert (Byte) 0.

  • Für den Typ short ist der Standardwert Null, dh der Wert von (short) 0.

  • Für Typ int ist der Vorgabewert Null ist, das heißt, 0.

  • Für Typ long, der Standardwert gleich Null ist, das heißt, 0L.

  • Für Typ Float ist der Standardwert positiv Null, dh 0.0f.

  • Für Typ double ist der Standardwert positiv null, dh 0.0d.

  • Für den Typ char ist der Standardwert das Nullzeichen, also '\ u0000'.

  • Für den Typ boolean ist der Standardwert false.

  • Für alle Referenztypen (Abschnitt 4.3), ist der Standardwert null

+0

+1 für tatsächlich alle primitiven Typen auflisten, ich war zu faul =). –

+0

Danke Ich weiß, was die initialisierten Werte sind, wenn sie initialisiert werden. Ich war mir einfach nicht sicher, in welchen Situationen Objekte standardmäßig initialisiert werden. –

+0

Dies sollte die akzeptierte Antwort sein. –