Fehler: Die Anzahl nicht statischer Variablen kann nicht von einem statischen Kontext in Java referenziert werden

Sheeraz Gul 12 Oktober 2023
Fehler: Die Anzahl nicht statischer Variablen kann nicht von einem statischen Kontext in Java referenziert werden

Dieses Tutorial demonstriert den Fehler: Anzahl der nicht statischen Variablen kann nicht aus einem statischen Kontext referenziert werden in Java.

der Fehler: Anzahl nicht statischer Variablen kann nicht von einem statischen Kontext aus referenziert werden in Java

Meistens tritt der Fehler: Anzahl der nicht statischen Variablen kann nicht aus einem statischen Kontext referenziert werden auf, wenn wir versuchen, eine nicht statische Elementvariable in der Hauptmethode zu verwenden, da die Methode main() statisch ist und ist automatisch aufgerufen. Wir müssen kein Objekt erstellen, um die Methode main() aufzurufen.

Um den Fehler: Anzahl der nicht statischen Variablen kann nicht aus einem statischen Kontext referenziert werden zu verstehen, müssen wir zuerst das Konzept der statischen und nicht statischen Methoden verstehen.

Statische Methoden

Die statischen Methoden gehören zu einer Klasse, aber nicht zur Instanz dieser Klasse. Die statische Methode wird ohne die Instanz oder das Objekt der Klasse aufgerufen.

Die statischen Methoden können nur auf die statischen Variablen und andere Mitglieder der statischen Methoden ihrer Klasse und anderer Klassen zugreifen. Die statischen Methoden können nicht auf die nicht statischen Mitglieder einer Klasse zugreifen.

Nicht statische Methoden

Jede Methode, die kein Static-Schlüsselwort enthält, ist eine nicht-statische Methode. Die nicht statischen Methoden können auf die statischen und nicht statischen Variablen und Mitglieder derselben Klasse oder einer anderen Klasse zugreifen.

Die nicht statischen Methoden können auch den Wert statischer Daten ändern.

Beispiel für statische und nicht statische Methoden in Java

Lassen Sie uns ein Beispiel ausprobieren, um statische und nicht statische Methoden zu demonstrieren.

package delftstack;

class DelftstackDemo {
  // non-static variable
  int Demo;

  // Static method
  public static void increment() {
    // Using a Non-Static Variable in Static Method. Error
    Demo++;
  }
}

public class Example {
  // Static Main method
  public static void main(String args[]) {
    DelftstackDemo Demo1 = new DelftstackDemo();
    DelftstackDemo Demo2 = new DelftstackDemo();
    DelftstackDemo Demo3 = new DelftstackDemo();

    Demo1.Demo = 7;
    Demo2.Demo = 8;
    Demo3.Demo = 9;

    // Calling the method
    DelftstackDemo.increment();

    System.out.println(Demo1.Demo);
    System.out.println(Demo2.Demo);
    System.out.println(Demo3.Demo);
  }
}

Der obige Code hat zwei Klassen. In der ersten Klasse verwendet der Code eine nicht statische Elementvariable in einer statischen Methode, und die zweite Klasse versucht, die Werte des nicht statischen Elements aus der Instanz in der Hauptmethode zu ändern.

Der Code wird einen Fehler auslösen.

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
	Cannot make a static reference to the non-static field Demo

	at delftstack.DelftstackDemo.increment(Example.java:12)
	at delftstack.Example.main(Example.java:29)

Der obige Code löst den Fehler aus, weil in der statischen Methode ein nicht statisches Mitglied Demo verwendet wird. Das Ändern der Methode inkrementieren in nicht statisch und das Aufrufen mit der ersten Klasseninstanz löst das Problem.

Siehe Lösung:

package delftstack;

class DelftstackDemo {
  // non-static variable
  int Demo;

  // change to a non-static method
  public void increment() {
    // No error
    Demo++;
  }
}

public class Example {
  // Static Main method
  public static void main(String args[]) {
    DelftstackDemo Demo1 = new DelftstackDemo();
    DelftstackDemo Demo2 = new DelftstackDemo();
    DelftstackDemo Demo3 = new DelftstackDemo();

    Demo1.Demo = 7;
    Demo2.Demo = 8;
    Demo3.Demo = 9;

    // Calling the method
    Demo1.increment();

    System.out.println(Demo1.Demo);
    System.out.println(Demo2.Demo);
    System.out.println(Demo3.Demo);
  }
}

Jetzt verwenden wir ein nicht-statisches Mitglied in der nicht-statischen Methode und rufen eine nicht-statische Methode in der Haupt-Statik durch die Instanz der ersten Klasse auf. Es löst das Problem.

Siehe Ausgabe:

8
8
9
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Verwandter Artikel - Java Error