361 Stimmen

Nicht-statische Variable kann nicht aus einem statischen Kontext referenziert werden

Ich habe diesen Testcode geschrieben:

class MyProgram
{
    int count = 0;
    public static void main(String[] args)
    {
        System.out.println(count);
    }
}

Es wird jedoch die folgende Fehlermeldung angezeigt:

Main.java:6: error: non-static variable count cannot be referenced from a static context
        System.out.println(count);
                           ^

Wie bringe ich meine Methoden dazu, meine Klassenvariablen zu erkennen?

12voto

Ajay Bhojak Punkte 1161

Das Wesentliche ist, dass statische Variablen oder statische Methoden auf Klassenebene liegen. Variablen oder Methoden auf Klassenebene werden vor den Methoden oder Variablen auf Instanzebene geladen, und offensichtlich kann das, was nicht geladen wird, nicht verwendet werden. Der Java-Compiler lässt also nicht zu, dass die Dinge, die zur Laufzeit behandelt werden sollen, zur Kompilierzeit gelöst werden. Deshalb gibt er die Fehlermeldung, dass nicht-statische Dinge nicht aus dem statischen Kontext referenziert werden können. Sie müssen nur über Class Level Scope, Instance Level Scope und Local Scope lesen.

6voto

Jetzt können Sie Instanzen in der Methode hinzufügen/verwenden

public class Myprogram7 {

  Scanner scan;
  int compareCount = 0;
  int low = 0;
  int high = 0;
  int mid = 0;  
  int key = 0;  
  Scanner temp;  
  int[]list;  
  String menu, outputString;  
  int option = 1;  
  boolean found = false;  

  private void readLine() {

  }

  private void findkey() {

  }

  private void printCount() {

  }
  public static void main(String[] args){

    Myprogram7 myprg=new Myprogram7();
    myprg.readLine();
    myprg.findkey();
    myprg.printCount();
  }
}

4voto

Petar Minchev Punkte 45933

Ich werde versuchen, Ihnen die statische Sache zu erklären. Zunächst einmal gehören statische Variablen nicht zu einer bestimmten Instanz der Klasse. Sie werden durch den Namen der Klasse erkannt. Statische Methoden gehören wiederum zu keiner bestimmten Instanz. Sie können nur auf statische Variablen zugreifen. Stellen Sie sich vor, Sie rufen MyClass.myMethod() auf und myMethod ist eine statische Methode. Wenn Sie innerhalb der Methode nicht-statische Variablen verwenden, wie zum Teufel soll sie dann wissen, welche Variablen sie verwenden soll? Aus diesem Grund können Sie in statischen Methoden nur statische Variablen verwenden. Ich wiederhole noch einmal, sie gehören NICHT zu einer bestimmten Instanz.

4voto

Everyone Punkte 2326
  • Zunächst einmal muss man den Unterschied zwischen einer Instanz einer Klasse und der Klasse selbst kennen. Eine Klasse modelliert bestimmte Eigenschaften und das Verhalten des Ganzen im Zusammenhang mit diesen Eigenschaften. Eine Instanz definiert spezifische Werte für diese Eigenschaften.

  • Alles, was an das Schlüsselwort static gebunden ist, ist im Kontext der Klasse und nicht im Kontext einer Instanz der Klasse verfügbar

  • Als Konsequenz aus dem oben Gesagten

    1. Variablen innerhalb einer Methode können nicht statisch sein
    2. statische Felder und Methoden müssen über den Klassennamen aufgerufen werden, z. B. MyProgram7.main(...)
  • Die Lebensdauer eines statischen Feldes/einer statischen Methode ist gleich der Lebensdauer Ihrer Anwendung

z.B.. Angenommen, ein Auto hat die Eigenschaft Farbe und zeigt das Verhalten "Bewegung". Ein Beispiel für ein Auto wäre ein roter Volkswagen Käfer, der sich mit 25 km/h bewegt.

Eine statische Eigenschaft des Autos wäre nun die Anzahl der Räder (4) auf der Straße, und dies würde für alle Autos gelten.

HTH

2voto

Lakindu Akash Punkte 884

Bevor Sie eine Instanzmethode oder Instanzvariable aufrufen, benötigt sie ein Objekt (Instanz). Wenn eine Instanzvariable von einer statischen Methode aufgerufen wird, weiß der Compiler nicht, zu welchem Objekt diese Variable gehört. Denn statische Methoden haben kein Objekt (immer nur eine Kopie). Wenn Sie eine Instanzvariable oder Instanzmethoden von einer Instanzmethode aus aufrufen, verweist sie auf die this Objekt. Das bedeutet, dass die Variable zu dem erstellten Objekt gehört und jedes Objekt seine eigene Kopie der Instanzmethoden und Variablen hat.

Statische Variablen sind markiert als static und Instanzvariablen haben keine spezifischen Schlüsselwörter.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X