Was genau bedeutet "statisch", wenn "globale" Variablen in Java deklariert werden?

7

Ich bin schon oft auf dieses Problem gestoßen und habe nie versucht zu verstehen, warum es passiert und was "statisch" eigentlich bedeutet. Ich habe gerade die Änderung, die Eclipse vorgeschlagen hat, übernommen und bin weitergegangen.

%Vor%

Also sagt Eclipse, dass ich static int iNumVertices; machen soll und ich bin mir nicht sicher warum. Also was genau ist "statisch", wie wird es benutzt, was ist der Zweck der Verwendung von "statisch", und warum gibt es mir dieses Problem?

    
Hristo 05.08.2010, 14:35
quelle

8 Antworten

9

Hier ist Ihr Beispiel:

%Vor%

Die Methode main ist eine statische Methode, die der Klasse zugeordnet ist. Es ist keiner Instanz von Member zugeordnet, daher kann es nicht auf Variablen zugreifen, die einer Instanz von Member zugeordnet sind. Die Lösung hierfür ist nicht , um diese Felder statisch zu machen. Stattdessen müssen Sie mit dem Schlüsselwort Member eine Instanz von new erstellen.

Hier ist eine modifizierte Version:

%Vor%

Wenn Sie feststellen, dass Sie globale Statik erstellt haben, ist dies ein Hinweis darauf, dass Sie genau darüber nachdenken sollten, wie Sie etwas gestalten. Es ist nicht immer falsch, aber es sollte dir sagen, darüber nachzudenken, was du tust.

    
Jonathon Faust 05.08.2010, 14:42
quelle
4

statische Variablen sind solche, die für alle Objekte einer Klasse gemeinsam genutzt werden. Hier in Ihrem Beispiel für jedes Objekt von Member , das Sie erstellen, erhalten Sie Objekte mit eigenen iNumVertices -Werten. Wenn Sie static für eine Variable verwenden, wird nur eine Variable für jedes Objekt von Member verwendet. static -Methoden funktionieren auf die gleiche Weise - sie werden über alle Objekte verteilt.

Da statische Variablen / Methoden allen Objekten gemeinsam sind, muss man kein Objekt der Klasse für den Zugriff auf diese Variablen / Methoden erstellen.

Nicht statische Variablen wie iNumVertices gehören zu einem Objekt einer Klasse. Auf sie kann nicht zugegriffen werden, ohne ein Objekt zu erstellen. Wenn Sie also auf eine nicht statische Variable aus einem statischen Kontext (hier main -Methode) zugreifen, weiß Java nicht, auf welches Objekt iNumVertices Sie zugreifen möchten. Daher der Fehler.

Machen Sie iNumVertices entweder statisch oder verweisen Sie darauf, indem Sie ein Objekt von Member

erstellen %Vor%     
Ara 05.08.2010 14:50
quelle
4
%Vor%

Was static bedeutet, dass die Klassenvariable für alle Instanzen dieser bestimmten Klasse gleich ist. Wenn Sie jedoch statische Variablen vermeiden möchten (was eine gute Idee ist, da statische Variablen im Speicher gehalten werden), können Sie Variablen übergeben value-through-Konstruktor, wodurch die Verwendung des statischen Modifikators vermieden wird und derselbe Effekt erzielt wird (das heißt, wenn Sie denselben Wert bei der Klasseninstanziierung übergeben).

Hier ist ein Codebeispiel:

%Vor%

So können Sie dies beim Erstellen einer neuen Instanz tun:

%Vor%

und jedes Mal, wenn Sie eine Car-Instanz erstellen, hat sie eine Geschwindigkeit von 100, wodurch die statische Deklaration private static int speed = 100;

vermieden wird     
Gandalf StormCrow 05.08.2010 15:24
quelle
2

Statische Variablen sind Klassenvariablen. Es wird eine einzige Kopie dieser Variablen geben, die für alle Instanzen der Klasse verfügbar ist, und sie teilen diese Variable. Statische Member können auch verwendet werden, ohne auf eine bestimmte Instanz der Klasse zu verweisen.

Mehr hier:

Ссылка

    
quelle
1

Bei statischen Variablen muss die Klasse nicht instanziiert werden, um darauf zugreifen zu können. Wenn Sie also versuchen, auf eine nicht statische Variable aus einem statischen Kontext zuzugreifen, riskieren Sie, auf etwas zuzugreifen, das nicht initialisiert / instanziiert wurde .

    
dave 05.08.2010 14:39
quelle
1

Statische Methoden können nur auf statische Variablen zugreifen. Es gibt zwei Arten von Variablen in der Klasse. Einer ist statische Variablen (auch Klassenvariablen) und andere ist Instanzvariable. Nur eine Kopie der statischen Variable existiert im Speicher, aber Instanzvariablen werden für jedes Objekt instanziiert. Bei statischen Variablen greifen also alle Objekte auf die gleiche Variable zu und jede von einem Objekt vorgenommene Änderung wird auf andere Objekte übertragen. Die Frage ist hier, warum Methoden statisch sein müssen, um auf statische Variablen zugreifen zu können. Wenn Sie eine Methode statisch machen, können Sie auf die Methode zugreifen, ohne Objekte dieser Klasse zu instanziieren. Wenn also diese Methode auf Instanzvariablen zugreifen kann, für welche Objektvariablen sollte sie dann geändert werden? Der andere Weg ist möglich, dh nicht statische Methoden können auf statische Variablen zugreifen.

    
user281693 05.08.2010 14:48
quelle
0

Jede Klassenvariable (eine Variable, die innerhalb des Klassenkörpers und außerhalb der Methodenkörper deklariert ist), die in einer statischen Methode verwendet wird, muss ebenfalls als statisch deklariert werden.

Auf statische Klassenvariablen und -methoden kann außerhalb dieser Klasse zugegriffen werden, ohne dass eine Instanz dieser Klasse benötigt wird.

    
Molske 05.08.2010 14:41
quelle
0

statische Variablen sind allen Instanzen einer Klasse gemeinsam.

Hinweis: Wie bereits erwähnt, handelt es sich um Klassenvariablen, d. h. für alle Instanzen.

Diese können auch als Variablen auf Klassenebene aufgerufen werden. Im Allgemeinen definieren Sie Konstanten (Sie benötigen auch das finale Schlüsselwort zum Definieren von Konstanten) und globale Variablen als statisch.

Weitere Informationen finden Sie unter: Ссылка

Ссылка

    
YoK 05.08.2010 14:41
quelle