/ / Java-Fehler “Nicht statische Variable kann nicht aus einem statischen Kontext referenziert werden” [duplicate] - Java, Networking, Static, Static-Methoden

Java-Fehler "Nicht statische Variable kann nicht aus einem statischen Kontext referenziert werden" [Duplikat] - Java-, Netzwerk-, statische, statische Methoden

Mögliche Duplikate:
Java: Nicht statische Variable kann nicht aus einem statischen Kontext referenziert werden. Fehler

Mein Ziel ist es, ein Programm für Client-Server-Chat zu erstellen. Ich habe den folgenden Code geschrieben https://github.com/jinujd/Java-networking/blob/master/Server.java für den Server .. Nach der Kompilierung habe ich folgende Fehlermeldung bekommen.

Nicht statische Variable, auf die in einem statischen Kontext nicht verwiesen werden kann. Was ist das Problem dort? Mein weiterer Zweifel ist das

/*A.java*/
class A {
String a;
class B {
}
public static void main() {
}
}

Ist die Variable a für B und main () zugänglich?

Antworten:

2 für die Antwort № 1

Static functions/variables werden der Klassendefinition selbst zugeordnet, während Klassenvariablen (non-static) sind verbunden mit class instance Das heißt, sie werden normalerweise initialisiert, wenn Sie ein Objekt aus der Klasse instanziieren.

Static functions/variables kann ohne Klasseninstanz verwendet werden als:

        A.main();

Während zuzugreifen non-static Funktionen / Variablen, Sie müssen zuerst eine Objektinstanz erstellen:

        A a = new A();
a.getA();

Schon seit static Der Geltungsbereich liegt in der Hierarchie (auf Definitionsebene) und es gibt keine Sichtbarkeit der Methoden / Variablen auf Instanzebene und daher Beschwerden. Das Gegenteil ist jedoch in Ordnung, d. H. Sie sollten von nicht statischen Methoden aus auf statische Methoden / Variablen zugreifen können.

Nachdem Sie den Grund erklärt haben, können Sie den Gültigkeitsbereich der Klasse / Methode / Variablen meines Erachtens selbst korrigieren.


1 für die Antwort № 2

Du brauchst

static class ClientReceiver extends Thread {

Nicht

class ClientReceiver extends Thread {

1 für die Antwort № 3

non-static variable this cannot be referenced from a static context. What is the problem there?

Sie benötigen eine Instanz der Klasse, um aus dem statischen Kontext auf die nicht statischen Daten zuzugreifen.

    public class Sample {
String var="nonstatic variable";
public static void main(String...args){
Sample s= new sample();
system.out.println(s.var);

}

}

Ihre Klasse B kann direkt auf die Zeichenfolge a zugreifen, Ihre statische Hauptmethode benötigt jedoch eine Instanz der Klasse A, um darauf zuzugreifen.