Was ist der Unterschied zwischen einer statischen und einer Instanzvariablen? Der folgende Satz ist was ich nicht bekommen kann:
In bestimmten Fällen sollte nur eine Kopie einer bestimmten Variablen von allen Objekten einer Klasse gemeinsam genutzt werden - hier wird eine statische Variable verwendet Eine statische Variable stellt klassenweite Informationen dar. Alle Objekte einer Klasse teilen dieselben Daten.
Ich dachte, dass Instanz-Vars klassenweit verwendet wurden, während statische Variablen nur einen Bereich innerhalb ihrer eigenen Methoden hatten?
Im Zusammenhang mit Klassenattributen hat static
eine andere Bedeutung. Wenn Sie ein Feld wie:
Jede Instanz der Klasse teilt die dieselbe Variable. Wenn Sie sie also in einer Instanz ändern, wird die Änderung in allen Instanzen reflektiert. erstellt entweder vor oder nach der Änderung.
Sie könnten also verstehen, dass dies in vielen Fällen schlecht ist, weil es sich zu einem unerwünschten Nebeneffekt entwickeln kann: Das Ändern des Objekts a
wirkt sich auch auf b
aus und Sie fragen sich vielleicht warum b
geändert wurde ohne ersichtlichen Grund. Jedenfalls gibt es Fälle, in denen dieses Verhalten absolut wünschenswert ist:
const
sind, macht es keinen Schaden, wenn alle Klassen auf den gleichen Wert zugreifen, denn niemand kann das ändern. Sie können auch Speicher sparen, wenn Sie viele Instanzen dieser Klasse haben. Nicht sicher über gleichzeitig Zugriff. static
vars werden instanziiert, bevor das Programm gestartet wird. Wenn Sie also zu viele davon haben, können Sie > den Startvorgang verlangsamen.
Eine static
-Methode kann nur auf static
-Attribute zugreifen, aber denke zweimal darüber nach, bevor du das versuchst.
Faustregel: Verwenden Sie nicht static
, es sei denn, es ist notwendig und Sie wissen, was Sie tun, oder Sie eine Klassenkonstante deklarieren.
Sagen Sie, es gibt eine Testklasse:
%Vor%Sie können auf eine statische Variable mit ihrem Klassennamen wie folgt zugreifen
%Vor%In beiden Fällen wird die Ausgabe 1 sein, wie es von allen Instanzen der Testklasse geteilt wird. während die Instanzvariable jeweils eine separate Kopie von b hat (Instanzvariable) Also
%Vor%Ich hoffe, das erklärt Ihre Anfrage.
Instanzvariablen :
Diese Variablen gehören zur Instanz einer Klasse, also eines Objekts. Und jede Instanz dieser Klasse (Objekt) hat eine eigene Kopie dieser Variablen. An der Variablen vorgenommene Änderungen spiegeln sich nicht in anderen Instanzen dieser Klasse wider.
%Vor%Klassenvariablen :
Diese Variablen werden auch als statische Membervariablen bezeichnet. Es gibt nur eine Kopie dieser Variablen, die für alle Instanzen dieser Klasse freigegeben ist. Wenn Änderungen an dieser Variablen vorgenommen werden, werden alle anderen Instanzen die Auswirkungen der Änderungen sehen.
%Vor%Instanzvariablen :
%Vor%Die Ausgabe ist:
123456
987654
Ändern Sie nun die Instanzvariable in eine Klassenvariable, indem Sie sie statisch machen:
Klassenvariablen :
%Vor% Ich habe nicht-statische Methoden verwendet, um den Wert von Barcode zu ermitteln und festzulegen, damit er vom Objekt und nicht von der Klasse aufgerufen werden kann.
Die Ausgabe wird folgen:
987654
987654
Klassenvariablen haben nur eine Kopie, die von allen verschiedenen Objekten einer Klasse gemeinsam genutzt wird, während jedes Objekt eine eigene Kopie einer Instanzvariablen hat. So können Instanzvariablen über verschiedene Objekte hinweg unterschiedliche Werte haben, während Klassenvariablen über verschiedene Objekte hinweg nur einen Wert haben können.
Instanzvariablen enthalten Werte, auf die von mehr als einer Methode, einem Konstruktor oder Block oder wesentlichen Teilen des Zustands eines Objekts verwiesen werden muss, die in der Klasse vorhanden sein müssen. Die statische Variable wäre nur eine Kopie jeder Klassenvariablen pro Klasse, unabhängig davon, wie viele Objekte daraus erstellt werden.
Ich denke, Sie denken über die C / C ++ - Definition des statischen Schlüsselworts nach. Dort hat das statische Schlüsselwort viele Verwendungsmöglichkeiten. In Java wird die Funktionalität des statischen Keywords in Ihrem Post beschrieben. Wie auch immer, du kannst es selbst ausprobieren:
%Vor%und ähnlich für nicht statische Variablen:
%Vor%Statische (Klassen-) Variablen und Instanzvariablen sind beide Membervariablen, da sie beide einer bestimmten Klasse zugeordnet sind, aber der Unterschied zwischen ihnen besteht darin, dass Klassenvariablen nur eine Kopie haben, die von allen verschiedenen Objekten einer Klasse gemeinsam genutzt wird Jedes Objekt hat seine eigene Kopie einer Instanzvariablen. So können Instanzvariablen über verschiedene Objekte hinweg unterschiedliche Werte haben, während Klassenvariablen über verschiedene Objekte hinweg nur einen Wert haben können.
Betrachten Sie eine Klasse MyClass
mit einem statischen und einem nicht statischen Member:
Lassen Sie uns nun ein main()
erstellen, um ein paar Instanzen zu erstellen:
Ergebnis:
%Vor% Nun können Sie den Wert der statischen Variable 60
in beiden Zeitpunkten sehen, da sich sowohl obj1
als auch obj2
auf dieselbe Variable beziehen. Bei der nicht statischen Variable unterscheiden sich die Ausgaben, da jedes Objekt bei der Erstellung seine eigene Kopie der nicht statischen Variablen behält; Änderungen, die an ihnen vorgenommen werden, haben keinen Einfluss auf die andere Kopie der Variablen, die von einem anderen Objekt erstellt wurde.
Tags und Links java class static-variables instance-variables