logo

Warum nicht statische Variablen in Java nicht aus einem statischen Kontext referenziert werden können

Der Fehler Eine nicht statische Variable kann in einem statischen Kontext in Java nicht referenziert werden Dieses Problem tritt vor allem bei Anfängern bei der Kompilierung von Java-Programmen auf. Der Grund für das Auftreten dieses Fehlers liegt darin, dass in der main()-Methode eine nicht statische Mitgliedsvariable verwendet wird. Da die main()-Methode in Java eine statische Methode ist und automatisch aufgerufen wird, müssen wir kein Objekt erstellen, um sie aufzurufen. Um den Fehler zu verstehen, müssen wir zunächst den Fehler verstehen statisch Und nicht statisch Methode in Java .

Statische Methode

In Java , öffentliche Methoden gehören zu einer Instanz der Klasse, aber wenn wir darüber reden statische Methode , sie gehören zu einer Klasse, nicht zu einer Instanz einer Klasse. Es ist nicht erforderlich, eine Instanz der Klasse zu erstellen, um eine statische Methode aufzurufen. Das statische Mitglied kann nur auf das statische Datenmitglied zugreifen und seinen Wert ändern.

Nichtstatische Methode

Alle Methoden ohne zu haben statisch Das Schlüsselwort vor dem Methodennamen wird als bezeichnet Nicht statisch Methoden. Für den Zugriff auf die statische Methode und die statische Variable muss keine Instanz der Klasse erstellt werden. Die nicht statischen Methoden werden dynamisch oder zur Laufzeitbindung verwendet. nicht wie statisch Methode können wir die überschreiben nicht statisch Methode.

Lassen Sie uns ein Java-Programm erstellen und denselben Fehler generieren.

Konvertieren Sie char in int Java

Im folgenden Beispiel haben wir eine private Variable deklariert Nummer vom Typ int vor der main()-Methode. In der Methode main() versuchen wir, die Zahl um 1 zu erhöhen. Es ist zu beachten, dass die Methode main() eine statische Methode und die Variable nicht statisch ist. Wenn wir das obige Programm kompilieren, erhalten wir den gleichen Fehler, wie wir unten gezeigt haben.

StaticExample1.java

 public class StaticExample { private int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

Ausgabe:

Java-Karten
Warum nicht statische Variablen in Java nicht aus einem statischen Kontext referenziert werden können

Lassen Sie uns nun die Variable deklarieren Nummer als statisch und kompilieren Sie den Code. Beachten Sie, dass sowohl die Variable als auch die Methode main() statisch sind.

StaticExample2.java

 class staticExample { private static int number=0; public static void main(String args[]){ number++; System.out.println(number); } } 

Ausgabe:

Warum nicht statische Variablen in Java nicht aus einem statischen Kontext referenziert werden können

Das Programm wird erfolgreich kompiliert und ausgeführt.

JQuery-Elternteil

Jede Instanz einer nicht statischen Variablen hat einen anderen Wert und wird erstellt, wenn der new()-Operator eine Instanz eines Objekts initialisiert. Die statischen Variablen werden beim Laden der Klasse erstellt oder initialisiert JVM .

Wir benötigen eine Instanz eines Objekts, um die nicht statische Variable aufzurufen. Wir können viele Objekte erstellen, indem wir dieser nicht statischen Variablen oder Instanzvariablen unterschiedliche Werte zuweisen.

StaticExample3.java

 class variable { int number; public static void increment() { number++; } } class StaticExample { public static void main(String args[]) { variable var1 = new variable(); variable var2 = new variable(); variable var3 = new variable(); var1.number = 12; var2.number = 13; var3.number = 14; variable.increment(); System.out.println(var1.number); System.out.println(var2.number); System.out.println(var3.number); } } 

Ausgabe:

Warum nicht statische Variablen in Java nicht aus einem statischen Kontext referenziert werden können

Im obigen Programm gibt es drei Objekte: var1, var2, var3 , werden für die Klasse erstellt Variable und den Objekten die drei unterschiedlichen Werte 12, 13, 14 zugeordnet var1, var2 , Und var3 , jeweils. Jetzt die Nummer Die Eigenschaft jedes Objekts hat einen eigenen ganzzahligen Wert. Wenn wir versuchen, den Wert der Eigenschaft „Zahl“ durch Aufrufen der Methode „inkrementieren“ zu erhöhen, versteht der Compiler nicht, für welchen Wert der Zahl die Methode den Wert erhöhen soll. Der Compiler sieht sich mit dem Mehrdeutigkeitsfehler konfrontiert und gibt den Fehler bei der Kompilierung aus Eine nicht statische Variable kann nicht aus einem statischen Kontext referenziert werden .

Lösung für den Fehler

Es gibt einen einfachen Weg, das Problem zu lösen Auf eine nicht statische Variable kann nicht aus einem statischen Kontext verwiesen werden Fehler. Im obigen Code müssen wir die nicht statische Variable mit dem Objektnamen ansprechen. Auf einfache Weise müssen wir ein Objekt der Klasse erstellen, um auf eine nicht statische Variable aus einem statischen Kontext zu verweisen. Wenn eine neue Variableninstanz erstellt wird, wird eine neue Kopie aller nicht statischen Variablen erstellt. Wir können also auf diese Variablen zugreifen, indem wir die Referenz der neuen Instanz der Klasse verwenden. Betrachten Sie beispielsweise das folgende Java-Programm.

Was ist in SQL der Fall?

StaticExample4.java

 class staticExample { int number = 0; public static void main(String args[]) { // using non-static variable by creating an object of the class staticExample test = new staticExample(); test.number++; System.out.println(test.number);a } } 

Ausgabe:

Warum nicht statische Variablen in Java nicht aus einem statischen Kontext referenziert werden können

Beschreibung

Im obigen Programm greifen wir über den Klassennamen auf die Zahleneigenschaft zu statischesBeispiel. Wir erstellen ein Objekt mit dem Klassennamen StaticExample prüfen und erhöhen Sie die Wert der Zahl durch Verwendung des Testobjekts.