Frage

Ich habe schon viele Male in dieses Problem läuft und ich nie zu lernen die Mühe, warum es passiert und lernen, was „statisch“ eigentlich bedeutet. Ich bewerben ich nur die Änderung, die Eclipse-vorgeschlagen und ging weiter.

public class Member {

 // Global Variables
 int iNumVertices;
 int iNumEdges;

 public static void main(String[] args) {

  // do stuff

  iNumVertices = 0; // Cannot make a static reference to the non-static field iNumVertices

  // do more stuff

 } // main end 
}

So Eclipse sagt mir static int iNumVertices; zu tun und ich bin mir nicht sicher, warum. Was genau ist „statisch“, wie wird es genutzt, was ist der Zweck „statisch“ zu verwenden, und warum ist es mir, dieses Problem zu geben?

War es hilfreich?

Lösung

Hier ist dein Beispiel:

public class Member {

    // Global Variables
    int iNumVertices;
    int iNumEdges;

    public static void main(String[] args) {

        // do stuff

        iNumVertices = 0; // Cannot make a static reference to the non-static field iNumVertices

    }
}

Das Verfahren main ist eine statische Methode mit der Klasse verbunden. Es ist nicht mit einer Instanz von Member verbunden sind, so kann es keinen Zugriff Variablen, die mit einer Instanz von Member zugeordnet sind. Die Lösung hierfür ist nicht die Felder statisch zu machen. Stattdessen müssen Sie eine Instanz von Member mit dem new Schlüsselwort erstellen.

Hier ist eine modifizierte Version:

public class Member {
    // Fields
    private int iNumVertices;
    private int iNumEdges;

    public Member(){
        // init the class
    }

    public static void main(String[] args) {
        Member member = new Member();
        member.iNumVertices = 0;
        // do more stuff
    }
}

Finding sich globale Statik zu schaffen ist ein Hinweis für Sie, dass Sie denken, sollten sorgfältig darüber, wie Sie entwerfen etwas. Es ist nicht immer falsch, aber es sollte Ihnen sagen, darüber nachzudenken, was Sie tun.

Andere Tipps

statisch Variablen sind diejenigen, die über alle Objekte einer Klasse gemeinsam genutzt werden. Hier im Beispiel für jedes Objekt von Mitglied Sie erstellen, werden Sie Objekte erhalten, die seine eigene haben iNumVertices Werte. Wenn Sie statisch mit einer variablen, gibt es nur eine Variable für jedes Objekt von shared Mitglied . statisch Methoden auf die gleiche Weise arbeiten - sie sind über alle Objekte gemeinsam genutzt.

Da statisch Variablen / Methoden sind für alle Objekte, braucht man sich nicht um ein Objekt der Klasse Zugriff machen diese Variablen / Methoden.

Nicht-statische Variablen wie iNumVertices , gehört zu einem Objekt einer Klasse. Sie können nicht, ohne ein Objekt zugegriffen werden. Also, wenn Sie eine nicht-statische Variable von einem statischen Kontext zugreifen (hier main -Methode), dann würde Java wissen nicht, welches Objekt der iNumVertices Sie accesss versuchen. Daraus ergibt sich die Fehler.

Sie entweder die Option iNumVertices statisch, oder sich darauf beziehen, indem ein Objekt der Mitglied Erstellen

Member m = new Member();
m.iNumVertices = 0;
learn what "static" actually means

Was statisch eigentlich bedeutet, dass Klassenvariable für alle Instanz dieser bestimmten Klasse gleich sein wird, aber wenn Sie statische Variablen vermeiden wollen (was eine gute Idee ist, da statische Variablen im Speicher gehalten werden) Sie können passieren variable Wert Trog Konstruktor dadurch Verwendung von statischem Modifikator zu vermeiden und erreicht die gleiche Wirkung (dh, wenn Sie den gleichen Wert auf Klasse Instanziierung passieren).

Hier ist Codebeispiel:

public class Car{

    private int speed;

    public Car(int speed){
        this.speed = speed;
    }

}

So können Sie dies tun, wenn neue Instanz zu erstellen:

Car car = new Car(100);

und jedes Mal, wenn Sie Auto-Instanz erstellen wird es hat Geschwindigkeit 100, also statische Erklärung private static int speed = 100; vermeiden

Statische Variablen sind Klassenvariablen. Es wird eine einzelne Kopie dieser Variablen verfügbar für alle Instanzen der Klasse sein, und sie werden diese Variable teilen. Statische Elemente können auch ohne Bezugnahme auf eine spezifische Instanz der Klasse verwendet werden.

Mehr hier:

http://download.oracle.com/javase/tutorial /java/javaOO/classvars.html

Statische Variablen brauchen nicht die Klasse haben, um instanziiert werden, um die zugegriffen werden soll, wenn Sie also eine nicht-statische Variable Form eines statischen Kontext zuzugreifen versuchen Sie riskieren, um den Zugang etwas versuchen, das nicht initialisiert / instanzierte .

Statische Methoden können nur statische Variablen zugreifen. Es gibt zwei Arten von Variablen in der Klasse. ist statische Variablen (auch Klassenvariablen) und andere Instanzvariablen. Nur eine Kopie der statischen Variable existiert im Speicher aber Instanzvariablen werden für jedes Objekt instanziert werden. Also für statische Variablen alle Objekte zugreifen die gleiche Variable und jede von einem Objekt vorgenommene Änderung wird zu anderen Objekten reflektiert werden. Die Frage ist hier, warum ist, dass Methoden statisch Zugriff statischen Variablen sein. Wenn Sie eine Methode statisch zu machen, können Sie die Methode aufrufen, ohne Objekte dieser Klasse instanziiert. Also, wenn diese Methode für den Zugriff Instanzvariablen der Lage ist, dann für die Variablen des Objekts sollte es Veränderungen? Der andere Weg ist möglich, dh nicht statische Methoden statische Variablen zugreifen können.

Jede Klasse Variable (eine Variable in der Klasse Körper erklärt und außerhalb der Methodenrümpfe) in einem statischen Methode Bedürfnissen verwendet zu erklären statisch werden.

Statische Klassenvariablen und Methoden können außerhalb dieser Klasse, ohne die Notwendigkeit für eine Instanz dieser Klasse zugegriffen werden.

statische Variablen sind in allen Instanzen einer Klasse.

Hinweis: Wie schon vorher gesagt sind diese Klassenvariablen das heißt von allen Instanzen gemeinsam genutzt

.

Diese können auch als Klassenstufe Variablen aufgerufen werden. Im Allgemeinen definieren Sie Konstanten (Sie auch letztes Schlüsselwort benötigen für die Definition Konstanten) und globale Variablen als statisch.

Weitere Informationen finden Sie: http://download.oracle.com/javase/tutorial/java/ javaOO / classvars.html

http://www.roseindia.net/java/beginners/staticvariable.shtml

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top