member attribut initialisierung
-
Folgender gueltiger Java(!)-Code irritiert mich etwas.
class Foo { int a=42,b=24; }
Ich bin aus C++ gewoehnt, dass man nur konstante, statische,
elementare builtins im Class body initialisieren darf.
-
das ist aber java .
beim aufruf eines ctors werden die felder dann gesetzt. kannst ja den debugger einsetzen um zu verfolgen wohin er dann springt.
-
Also kann ich die initialisierung von non-const-static data members quasi als default parameter ansehen...
-
ja oder nein?
-
Soweit ich weiß ist
class Foo{ int a=24, b=42; }
nicht's anderes als
class Foo{ int a,b; public Foo(){ a=24, b=42; } }
Somit kannst du sie als Default-Parameter ansehen.
-
KaraHead schrieb:
Soweit ich weiß ist
class Foo{ int a=24, b=42; }
nicht's anderes als
class Foo{ int a,b; public Foo(){ a=24, b=42; } }
Somit kannst du sie als Default-Parameter ansehen.
Es ist schon etwas anderes. Fälschlicherweise wird die Zuweisung im Konstruktor immer als Initialisierung beschrieben. Es handelt sich jedoch, genau wie in C++, um eine Zuweisung. Initialisiert werden die Variablen vor dem Konstruktor-Aufruf und zwar mit dem Wert, der im Klassenrumpf angegeben wird (oder default-Wert).
Wenn du also im Konstruktor eine Zuweisung machst, wird damit die Initialisierung im Rumpf der Klasse nichtig. Die Initialisierung im Klassenrumpf ist mit der Initialisierliste von C++ vergleichbar, kann aber eben nicht für jeden Konstruktor angepasst werden.
-
Das wollte ich hoeren!
Danke!