Was sind die Unterschiede zwischen Klassenvariablen und Instanzvariablen in Java? [geschlossen]
On Januar 1, 2021 by adminKommentare
- Sie haben anscheinend angefangen, zu lesen.
Die Java ™ -Tutorials: Grundlegendes zu Klassenmitgliedern erklärt dies, hat aber ' es nicht vollständig verstanden.
Antwort
Beide sind Mitgliedsvariablen , was bedeutet, dass beide einer Klasse zugeordnet sind. Jetzt 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. Änderungen an der Variablen werden in anderen Instanzen dieser Klasse nicht berücksichtigt.
public class Product { public int Barcode; }
Klassenvariablen:
Diese werden auch als statische Elementvariablen
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 lautet:
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 Holen Sie sich den Wert von Barcode
und setzen Sie ihn, um ihn vom Objekt aus aufrufen zu können, und nicht von fr aus der Klasse. Die Ausgabe lautet wie folgt:
987654
987654
Kommentare
- Warum ein C # -Beispiel für eine Java-Frage?
- Meine Gedanken genau. Ich kenne nur Java-Programmierung, nicht C #, also haben Sie es nicht war sehr hilfreich
- @BasileStarynkevitch Ich ' bin hauptsächlich ein C # -Entwickler und da das Prinzip für beide zählt und so gut wie das gleiche ist, habe ich schnell ein C # bereitgestellt Beispiel, natürlich falsch von mir. 🙂 Mein Beispiel wurde in Java geändert.
- @SkylarAdams Entschuldigung, ich habe fälschlicherweise zu schnell angenommen, dass jeder, der Java kennt, C # kennt. Ich habe das Beispiel in ein Java-Beispiel geändert, hoffe es hilft.
- Für diese Art von Frage halte ich es für irrelevant, ob Java oder C # verwendet wird,
Antwort
Hier wird erklärt (mit einem Beispiel Klasse mit Klassenvariable numberOfBicycles
und Instanzvariablen cadence
, speed
, gear
& id
):
Manchmal möchten Sie Variablen haben, die allen Objekten gemeinsam sind. Dies wird mit dem Modifikator
static
erreicht. Felder mit dem Modifikatorstatic
in ihrer Deklaration werden als statische Felder oder Klassenvariablen bezeichnet. Sie sind eher der Klasse als einem Objekt zugeordnet. Jede Instanz der Klasse teilt eine Klassenvariable, die sich an einem festen Ort im Speicher befindet. Jedes Objekt kann den Wert einer Klassenvariablen ändern, aber Klassenvariablen können auch bearbeitet werden, ohne eine Instanz der Klasse zu erstellen.
Eine Klassenvariable (deklariert) static
) ist ein Speicherort, der allen Instanzen gemeinsam ist.
Im Beispiel ist numberOfBicycles
eine Klassenvariable (da sie als static
deklariert ist). Es gibt nur eine solche Variable (d. H. Den Ort), die allen Instanzen und der Klasse gemeinsam ist. Wenn Sie also numberOfBicycles
in einer Methode ändern, wird bei anderen Methoden der neue Wert angezeigt (auch für andere Bicycle
Objekte)
Im Gegensatz dazu sind gear
& id
Instanzvariablen (weil ihre Deklaration keinen Modifikator static
hat). Jedes Bicycle
Objekt hat ein eigenes. Wenn Sie gear
für einige Bicycle
a ändern und b eine andere ist Das Ändern von a.gear
hat keine Auswirkungen auf b.gear
Jedes Java-Objekt ist eine eigene Speicherzone mit einigen Metadaten (z. B. ein Verweis auf seine Klasse) und seine eigenen Instanzvariablen (möglicherweise von einer Oberklasse geerbt).Die Klassenvariablen sind jedoch für die Klasse gleich und werden von allen Instanzen gemeinsam genutzt.
Siehe auch Objekt (Informatik) & Instanzvariable Wikipages.
Antwort
Instanzvariable:
- Instanzvariablen werden in einer Klasse deklariert, aber außerhalb einer Methode, eines Konstruktors oder eines beliebigen Blocks.
- Instanzvariable gehört zur Instanz einer Klasse, oder Sie können sagen, dass Instanzvariable zum Objekt gehört.
-
Instanzvariable haben separater Wert für jede Instanz der Klasse.
Class InstanceDemo { // this instance variable is visible for any child class. public String name = "Testing"; // count variable is visible in Demo class only. private int count = 2; }
Methode für den Zugriff auf die Instanzvariable:
InstanceDemo demo = new InstanceDemo (); System.out.println("Access Instance variable: " + demo.count + " , "+demo.name );
Ausgabe: 2, Testen
Klassenvariable:
- Die Klassenvariable gehört zur Klasse.
- Klassenvariable wird erstellt durch Hinzufügen des Schlüsselworts „static“ vor der Variablen.
- Wird auch als statische Variable bezeichnet.
-
Und die wichtigste Klassenvariable behält einen einzigen gemeinsamen Wert für alle Instanzen einer Klasse bei Wenn kein Instanzobjekt der Klasse vorhanden ist.
Class ClassDemo { // count variable is Same for all instance of this class public static int count = 2; }
Methode für den Zugriff auf Klassenvariable:
System.out.println("Access Class variable: " + ClassDemo.count ); //class variable is directly refer with class name
Ausgabe: 2
Kurzer Unterschied zwischen Klassenvariable und Instanzvariable:
- Instanzvariablen haben jeweils separate Werte Instanz einer Klasse. Klassenvariablen behalten einen einzigen gemeinsamen Wert für alle Instanzen der Klasse bei, auch wenn kein Instanzobjekt dieser Klasse vorhanden ist.
- Sie würden das statische Schlüsselwort verwenden, um eine Instanzvariable in eine Klassenvariable zu ändern.
- Sowohl Instanz- als auch Klassenvariablen werden auf Klassenebene deklariert, nicht innerhalb von Methoden.
Antwort
Der Unterschied zwischen class variables
und instance
Variablen ist einfach eine Frage von who knows what?
.
Eine instance variable
ist nur bekannt (= gebunden ) zu dieser konkreten Instanz – daher der Name.
public class Person { private String firstName; private String lastName; [...] }
Die Definition einer Klasse ist wie eine Blaupause zum Erstellen von konkreten Objekten. Vielleicht verwirrt Sie dieser Punkt ein wenig. Wenn Sie es jedoch so schreiben, wird jede Variable an ihr konkretes Objekt gebunden: z. Jede Person hat ihren eigenen Vornamen
Eine class variable
hingegen ist – wie der Name schon sagt – jedem Mitglied bekannt einer Klasse; oder technisch: Es ist auf Klassenebene bekannt / gebunden. Das typische Beispiel ist ein Zähler für die Anzahl der von Ihnen erstellten Objekte – obwohl dies ein sehr problematisches Beispiel ist. Dies spielt jedoch in diesem frühen Stadium keine Rolle.
public class Person { private String firstName; private String lastName; [...] static int numberOfPersons = 0 }
numberOfPersons
wird als ist das Schlüsselwort, um zwischen class variables
und instance variabes
zu unterscheiden. Die Variable wird wie die anderen in der Klassendefinition deklariert Das Schlüsselwort static
signalisiert jedoch, dass es anders ist.
-
firstName
,lastName
sind Instanzvariablen und an diese konkrete Instanz gebunden -
numberOfPersons
ist an die Klasse gebunden, sodass jede Instanz auf diese Variable zugreifen kann.
tl; dr
Der Ort, an dem Variablen definiert werden, ist die Klassendefinition.
Klassenvariablen sind auf Klassenebene bekannt, dh an jeden konkreten Instanz hat Zugriff darauf. Um eine Klassenvariable zu definieren, verwenden Sie das Schlüsselwort static
.
I. nstance-Variablen sind nur auf Instanzebene bekannt. Sie definieren sie ohne das Schlüsselwort static
.
Schreibe einen Kommentar