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
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.
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.
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%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.
Tags und Links java