Ich bin sehr neu in Java und möchte den Unterschied zwischen Klassenvariablen und Instanzvariablen verstehen.
Zum Beispiel:
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 sind Instanzvariablen? Wie wirkt sich das auf den Geltungsbereich aus?
Beide sind Mitgliedsvariablen, was bedeutet, dass beide mit einer Klasse verbunden sind. Nun gibt es natürlich Unterschiede zwischen den beiden:
Instanzvariablen:
Diese Variablen gehören zu der Instanz einer Klasse, also einem Objekt. Und jede Instanz dieser Klasse (Objekt) hat ihre eigene Kopie dieser Variablen. Änderungen, die an der Variablen vorgenommen werden, spiegeln sich nicht in anderen Instanzen dieser Klasse wider.
public class Product {
public int Barcode;
}
Klassenvariablen:
Diese sind auch als statische Mitgliedsvariablen bekannt und es gibt nur eine Kopie dieser Variable, die von allen Instanzen dieser Klasse gemeinsam genutzt wird. Wenn Änderungen an dieser Variable vorgenommen werden, werden alle anderen Instanzen die Auswirkungen der Änderungen sehen.
public class Product {
public static int Barcode;
}
Vollständiges Beispiel:
// INSTANCE VARIABLE
public class Main {
public static void main(String[] args) {
Product prod1 = new Product();
prod1.Barcode = 123456;
Product prod2 = new Product();
prod2.Barcode = 987654;
System.out.println(prod1.Barcode);
System.out.println(prod2.Barcode);
}
}
public class Product {
public int Barcode;
}
Die Ausgabe wird sein:
123456
987654
Ändern Sie nun die Instanzvariable in eine Klassenvariable, indem Sie sie statisch machen:
//CLASS VARIABLE
public class Main {
public static void main(String[] args) {
Product prod1 = new Product();
prod1.setBarcode(123456);
Product prod2 = new Product();
prod2.setBarcode(987654);
System.out.println(prod1.getBarcode());
System.out.println(prod2.getBarcode());
}
}
public class Product {
public static int Barcode;
public int getBarcode() {
return Barcode;
}
public void setBarcode(int value){
Barcode = value;
}
}
Ich habe nicht-statische Methoden verwendet, um den Wert von Barcode
zu erhalten und zu setzen, um ihn vom Objekt und nicht von der Klasse aus aufrufen zu können. Die Ausgabe wird wie folgt aussehen:
987654
987654
Es wird hier erklärt (mit einem Beispiel der Klasse Bicycle
mit der Klassenvariablen numberOfBicycles
und den Instanzvariablen cadence
, speed
, gear
& id
):
Manchmal möchte man Variablen haben, die für alle Objekte gleich sind. Dies wird mit dem Modifikator
static
erreicht. Felder, die den Modifikatorstatic
in ihrer Deklaration haben, werden statische Felder oder Klassenvariablen genannt. Sie sind mit der Klasse und nicht mit einem Objekt verbunden. Jede Instanz der Klasse teilt sich eine Klassenvariable, die sich an einem festen Ort im Speicher befindet. Jedes Objekt kann den Wert einer Klassenvariablen ändern, aber Klassenvariablen können auch manipuliert werden, ohne eine Instanz der Klasse zu erzeugen.
Eine (als "statisch" deklarierte) Klassenvariable ist ein gemeinsamer Speicherplatz für alle Instanzen.
In diesem Beispiel ist "Anzahl der Fahrräder" eine Klassenvariable (da sie als "statisch" deklariert ist). Es gibt nur eine solche Variable (d.h. eine Stelle), die allen Instanzen und der Klasse gemeinsam ist. Wenn Sie also numberOfBicycles
in einer Methode ändern, würden andere Methoden den neuen Wert sehen (sogar für verschiedene Bicycle
-Objekte)
Im Gegensatz dazu sind gear
& id
Instanzvariablen (weil ihre Deklaration keinen static
Modifikator hat). Jedes Bicycle
Objekt hat seine eigene. Wenn Sie Gang
für ein Fahrrad
a ändern, und wenn b* eine andere Instanz ist, hat die Änderung von a.Gang
keinen Effekt auf b.Gang
Jedes Java-Objekt ist ein eigenständiger Speicherbereich mit einigen Metadaten (z. B. einem Verweis auf seine Klasse) und seinen eigenen Instanzvariablen (die vielleicht von einer Oberklasse geerbt wurden). Die Klassenvariablen sind jedoch der Klasse gemeinsam und werden von allen Instanzen genutzt.
Siehe auch Objekt (Informatik) & Instanzvariable wikipages.
Instanzvariable:
Instanzvariablen werden in einer Klasse deklariert, aber außerhalb einer Methode, Konstruktors oder eines Blocks.
Die Instanzvariable gehört zur Instanz einer Klasse oder man kann sagen dass die Instanzvariable zum Objekt gehört.
Instanzvariablen haben einen eigenen Wert für jede Instanz der Klasse. der Klasse.
Klasse InstanceDemo {
// diese Instanzvariable ist für jede Unterklasse sichtbar.
public String name = "Testing";
// Die Variable count ist nur in der Klasse Demo sichtbar.
private int count = 2;
}
Methode zum Zugriff auf die Instanzvariable:
InstanceDemo demo = new InstanceDemo ();
System.out.println("Zugriff auf Instanzvariable: " + demo.count + " , "+demo.name ); " Ausgabe: 2 , Testen
Klassenvariable:
Die Klassenvariable gehört zu einer Klasse.
Klassenvariable wird durch Hinzufügen des Schlüsselworts "static" vor der Variable.
Sie wird auch statische Variable genannt.
Und das Wichtigste: Klassenvariablen behalten einen einzigen gemeinsamen Wert für alle Instanzen einer Klasse, auch wenn kein Instanzobjekt der Klasse existiert.
Klasse ClassDemo {
// Die Variable count ist für alle Instanzen dieser Klasse gleich
public static int count = 2;
}
Methode zum Zugriff auf Klassenvariable:
System.out.println("Zugriff auf Klassenvariable: " + ClassDemo.count ); //Klassenvariable ist direkt mit Klassennamen referenziert
Ausgabe: 2
Kurzer Unterschied zwischen Klassenvariable und Instanzvariable: