Name der nicht statischen Variablen kann nicht aus einem statischen Kontext referenziert werden [duplizieren]

9
%Vor%

Wenn ich diesen Code ausfühle, finde ich einen Fehler, der besagt, dass ein nicht statischer Variablenname nicht aus einem statischen Kontext referenziert werden kann

    
Rohit Sharma 19.11.2010, 15:57
quelle

5 Antworten

10

Das liegt daran, dass der Name und das Album der Variablen in der Hauptprozedur nicht existieren, da es statisch ist, was bedeutet, dass es nicht auf Mitglieder auf Instanzebene zugreifen kann. Sie benötigen eine Instanz der Singer-Klasse, wie folgt:

%Vor%

Wenn Sie jedoch Ihren Namen / Ihre Albummitglieder nicht mit einem öffentlichen Zugriffsmodifizierer deklarieren, kann der obige Code nicht kompiliert werden. Ich empfehle das Schreiben eines Getters für jedes Mitglied (getName (), getAlbum (), usw.), um von der Kapselung zu profitieren. So:

%Vor%

Eine andere Alternative wäre, den Namen und das Album als statisch zu deklarieren, dann können Sie sie auf die ursprüngliche Weise referenzieren.

    
Chris Hutchinson 19.11.2010 16:01
quelle
2

Ein nicht-statisches Mitglied oder eine Klasse muss instanziert werden, um existieren zu können. Der Zugriff auf ein nicht statisches Element oder Objekt von einem statischen Element garantiert nicht, dass dieses Element oder Objekt instanziiert wird. Der Zugriff darauf ist nicht möglich.

Sie müssen eine Instanz Ihres nicht statischen Objekts in Ihrem statischen Kontext erstellen, um es zu erstellen.

%Vor%

Auf diese Weise schließen Sie die Instanziierung des Singer -Objekts in ein statisches Objekt ein, wodurch sichergestellt wird, dass es ordnungsgemäß instanziiert wird, bevor auf es zugegriffen wird.

    
Will Marcouiller 19.11.2010 16:06
quelle
1

Main ist eine statische Methode. Instanzvariablen (Variablen, die in der Klasse definiert sind, aber nicht als statisch markiert sind) können nicht von einer statischen Methode aus aufgerufen werden, ohne auf eine Instanz der Klasse zu verweisen.

%Vor%     
Jonathon Faust 19.11.2010 16:02
quelle
0

Eine Option ist, was Chris Hutchinson erwähnt hat. Der andere ist, sie als statisch zu deklarieren.

main ist eine statische Methode. Name und Album müssen also als statisch deklariert werden.

%Vor%     
CoolBeans 19.11.2010 16:02
quelle
0

Um mehr über Chris 'Antwort zu erfahren, können Sie technisch so viele Instanzen der Singer-Klasse haben, wie Ihr Speicher sie unterstützen kann, aber es gibt immer nur eine Instanz der Hauptfunktion. Dies bedeutet, dass der Versuch, über die statische Funktion auf diese Variablen zuzugreifen, bedeutet, dass sie keine Ahnung hat, auf welche Instanz der Variablen zugegriffen werden soll, daher der Fehler.

Sie können die Variablen für die Hauptfunktion lokal machen, aber das würde wahrscheinlich den Zweck des Programms zunichte machen, denn da die Logik es vorschreibt, kann es mehr als einen Sänger geben (am wahrscheinlichsten). Ein besserer Angriffsplan wäre es, eine generische Klasse zu erstellen, die die Hauptfunktion enthält, und dann innerhalb dieser (oder anderswo) eine Singer-Klasse zu erstellen und X-Instanzen dieser Klasse in Ihrer Hauptfunktion zu instanziieren und von dort aus zu gehen.

    
MattC 19.11.2010 16:05
quelle

Tags und Links