26 Stimmen

Warum kann ich mein statisches Datenelement nicht in meinem Konstruktor initialisieren?

Ich habe die Antwort in parashift gelesen, aber ich brauche ein paar Details, warum der Compiler es nicht erlaubt, statische Mitgliedsvariablen im Konstruktor zu definieren.

40voto

Naveen Punkte 71443

Statische Mitgliedsvariablen sind nicht mit jedem Objekt der Klasse verbunden. Sie werden von allen Objekten gemeinsam genutzt. Wenn Sie im ctor initialisieren, bedeutet dies, dass Sie versuchen, sie mit einer bestimmten Instanz der Klasse zu verknüpfen. Da dies nicht möglich ist, ist es nicht erlaubt.

5voto

jamesdlin Punkte 63159

Ich nehme an, Sie beziehen sich auf die Verwendung in einer Initialisierungsliste für einen Konstruktor. Ein statisches Datenelement wird von allen Instanzen der Klasse gemeinsam genutzt. Es kann sein initialisiert einmal (per Definition der Initialisierung), so dass es nicht sinnvoll wäre, sie für jede Instanz zu initialisieren.

Sie können ihm jedoch im Konstruktorkörper einen Wert zuweisen (oder den vorhandenen Wert ändern). Wenn das Datenelement eine Konstante ist, können Sie es auch außerhalb des Konstruktors statisch initialisieren.

0voto

Jojo Sardez Punkte 8150

Statische Variable kann nicht innerhalb einer Methode definiert werden (auch wenn die Methode statisch ist), Sie können jedoch die statische Variable außerhalb des Konstruktors definieren und einen Wert innerhalb des Konstruktors zuweisen. Auf diese Weise ist die Variable jedoch für die gesamte Klasse zugänglich.

0voto

Rise Punkte 820

1) Statische Variablen sind Eigentum der Klasse und nicht des Objekts. 2) Jede statische Variable wird initialisiert, bevor ein Objekt erstellt wird.

  • Das ist der Grund, warum Compiler nicht erlauben, statische Variablen innerhalb des Konstruktors zu definieren, da der Konstruktor aufgerufen wird, wenn ein Objekt erstellt wird.

0voto

Davit Tevanian Punkte 861

Eine Mitgliederinitialisierungsliste bezeichnet Initialisierung . A static Mitglied bereits zu Beginn Ihres Programms initialisiert wird (vor main ). Wenn Sie das tun könnten, was Sie vorschlagen, würden Sie das System "neu initialisieren". static Mitglied mit jedem Objekt, das Sie erstellen, aber Objekte werden nur einmal initialisiert.

Wenn Sie stattdessen den Wert eines Objekts ändern wollen, nachdem es initialisiert wurde, müssen Sie zuweisen. dazu.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X