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! 🙂


Anmelden zum Antworten