Ich bin sehr neu in Java und möchte den Unterschied zwischen Klassenvariablen und Instanzvariablen verstehen.
Beispielsweise:
class Bicycle {
static int cadence = 0;
int speed = 0;
int gear = 1;
}
Wie unterscheiden sich Instanzvariablen und Klassenvariablen voneinander? Welche Variablen sind hier Klassenvariablen und welche Instanzvariablen? Wie wirkt sich dies auf den Geltungsbereich aus?
Antworten:
Sie sind beide Mitgliedsvariablen , was bedeutet, dass beide einer Klasse zugeordnet sind. Nun gibt es natürlich Unterschiede zwischen den beiden:
Instanzvariablen:
Diese Variablen gehören zur Instanz einer Klasse , also zu einem Objekt. Und jede Instanz dieser Klasse (Objekt) hat eine eigene Kopie dieser Variablen. An der Variablen vorgenommene Änderungen werden in anderen Instanzen dieser Klasse nicht berücksichtigt.
Klassenvariablen:
Diese Variablen werden auch als statische Membervariablen bezeichnet, und 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.
Vollständiges Beispiel:
Die Ausgabe wird sein:
Ändern Sie nun die Instanzvariable in eine Klassenvariable, indem Sie sie statisch machen:
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 folgend sein:quelle
Es wird erklärt , hier (mit einer Beispiel -
Bicycle
Klasse mit KlassenvariablennumberOfBicycles
und Instanzvariablencadence
,speed
,gear
&id
):Eine Klassenvariable (deklariert
static
) ist eine Position, die allen Instanzen gemeinsam ist.Im Beispiel
numberOfBicycles
handelt es sich um eine Klassenvariable (da diese deklariert iststatic
). Es gibt nur eine solche Variable (dh Position), die allen Instanzen und der Klasse gemeinsam ist. Wenn Sie alsonumberOfBicycles
in einer Methode Änderungen vornehmen, sehen andere Methoden den neuen Wert (auch für andere)Bicycle
Objekte).Im Gegensatz
gear
&id
ist beispielsweise Variablen (weil ihre Erklärung hat keinenstatic
Modifier). JedesBicycle
Objekt hat sein eigenes. Wenn Siegear
für einigeBicycle
a ändern und wenn b eine andere Instanz ist, hat die Änderunga.gear
keine Auswirkungen aufb.gear
Jedes Java-Objekt ist eine eigene Speicherzone mit einigen Metadaten (z. B. einem Verweis auf seine Klasse) und eigenen Instanzvariablen (möglicherweise von einer Superklasse geerbt). Die Klassenvariablen sind jedoch der Klasse gemeinsam und werden von allen Instanzen gemeinsam genutzt.
Siehe auch Objekt (Informatik) & Instanzvariable Wikipages.
quelle
Instanzvariable:
Instanzvariable haben einen separaten Wert für jede Instanz der Klasse.
Klassenvariable:
Die wichtigste Klassenvariable verwaltet einen gemeinsamen Wert für alle Instanzen einer Klasse, auch wenn kein Instanzobjekt der Klasse vorhanden ist.
Kurzer Unterschied zwischen Klassenvariablen und Instanzvariablen:
quelle
Der Unterschied zwischen
class variables
undinstance
Variablen ist einfach eine Frage vonwho knows what?
.An
instance variable
ist nur diese konkrete Instanz bekannt (= gebunden ) - daher der Name.Die Definition einer Klasse ist wie eine Blaupause für die Erstellung konkreter Objekte. Vielleicht verwirrt Sie dieser Punkt ein bisschen. Wenn Sie es aber so schreiben, wird jede Variable an ihr konkretes Objekt gebunden: zB Jede Person hat ihren eigenen Vornamen
A
class variable
hingegen ist - wie der Name schon sagt - jedem Mitglied einer Klasse bekannt; oder technisch: Es ist auf Klassenebene bekannt / gebunden . Das typische Beispiel ist ein Zähler dafür, wie viele Objekte Sie erstellt haben - obwohl es ein sehr problematisches Beispiel ist. Aber das spielt in diesem frühen Stadium keine Rolle.numberOfPersons
wird deklariert,static
welches das Schlüsselwort ist, um zwischenclass variables
und zu unterscheideninstance variabes
. Die Variable wird wie die anderen innerhalb der Klassendefinition deklariert. Aber dasstatic
Schlüsselwort signalisiert, dass es anders ist.firstName
,lastName
Sind Instanzvariablen und zu diesem konkreten Fall gebundennumberOfPersons
ist an die Klasse gebunden, so dass jede Instanz auf diese Variable zugreifen kann.tl; dr
Der Ort, an dem Variablen definiert werden, ist die Klassendefinition.
Klassenvariablen sind auf Klassenebene bekannt / gebunden, dh jede konkrete Instanz hat Zugriff darauf. Um eine Klassenvariable zu definieren, verwenden Sie das Schlüsselwort
static
.Instanzvariablen sind nur auf Instanzebene bekannt. Sie definieren sie ohne das
static
Schlüsselwort.Weitere Dokumentation zu Java finden Sie hier
quelle