1. Statische Variablen
Wenn eine Klasse in den Speicher geladen wird, wird sofort ein statisches Objekt erstellt. Dieses Objekt speichert statische Klassenvariablen (statische Klassenfelder). Das statische Objekt existiert auch dann, wenn keine gewöhnlichen (nicht statischen) Objekte der Klasse erstellt wurden.
Wenn wir Variablen in einer Klasse deklarieren, geben wir an, ob sie nur einmal erstellt werden oder ob es in jedem Objekt unterschiedliche Instanzen dieser Variablen geben soll. Standardmäßig wird für jedes Objekt eine neue Kopie jeder Variablen erstellt.
Eine statische Variable ist an das statische Objekt der Klasse gebunden und es gibt immer eine einzelne Instanz davon.
static
Um eine statische Variable in einer Klasse zu erstellen, müssen Sie das Schlüsselwort vor ihren Namen schreiben . Das allgemeine Format zum Deklarieren einer statischen Variablen ist:
static Type name = value;
Wenn einer statischen Variablen kein Anfangswert zugewiesen wird, wird sie mit einem Standardwert initialisiert:
Typ | Standardwert |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
(das Gleiche wie
) |
|
|
und alle Klassen |
|
Beispiele:
Code | Notiz |
---|---|
|
|
|
|
|
|
|
|
|
Innerhalb einer Klasse können Sie auf ihre statischen Variablen verweisen, indem Sie einfach deren Namen verwenden. Um jedoch von einer anderen Klasse aus darauf zuzugreifen, müssen Sie den Namen der Klasse vor den Namen der statischen Variablen schreiben.
ClassName.variable
Beispiel:
Variable | Klasse | Zugriff auf eine Variable außerhalb ihrer Klasse |
---|---|---|
|
|
|
|
|
|
|
|
Die Variable ist private . Es ist außerhalb der Klasse nicht sichtbar. |
|
|
Die Variable ist private . Es ist außerhalb der Klasse nicht sichtbar. |
|
|
Die Variable ist private . Es ist außerhalb der Klasse nicht sichtbar. |
2. Unterschied zwischen statischen und nicht statischen Variablen
Nicht-statische (gewöhnliche) Variablen einer Klasse werden auf die gleiche Weise deklariert wie statische, nur ohne das static
Schlüsselwort.
Was ist der Unterschied zwischen gewöhnlichen Variablen und statischen Variablen?
Gewöhnliche Variablen einer Klasse sind an Objekte der Klasse (Instanzen der Klasse) gebunden, während statische Variablen an das statische Objekt der Klasse gebunden sind.
Wenn es mehrere Instanzen einer Klasse gibt, verfügt jede von ihnen über eine eigene Kopie der nicht statischen (gewöhnlichen) Variablen. Statische Variablen einer Klasse werden immer in ihrem statischen Objekt gespeichert und es existiert nur eine einzige Instanz von ihnen.
Sie können nur dann auf die gewöhnlichen Variablen (Felder) einer Klasse zugreifen, wenn Sie über eine Referenz auf ein Objekt der Klasse verfügen. Und natürlich innerhalb der Methoden der Klasse.
Beispiel:
Zugriff auf ein Feld einer Klasse mithilfe einer Objektreferenz |
---|
|
Sie können von überall auf statische Variablen zugreifen (nach Berücksichtigung der Sichtbarkeitsmodifikatoren): von gewöhnlichen Methoden, von statischen Methoden derselben Klasse, von Methoden anderer Klassen usw.
Beispiel:
Zugriff auf ein statisches Feld einer Klasse ohne Verwendung einer Objektreferenz |
---|
|
So ist das Gedächtnis organisiert:
Nehmen wir an, wir haben eine Person
Klasse mit 4 Feldern: zwei sind statisch und zwei nicht.
public class Person
{
public static int count = 0;
public static int sum = 0;
public int age = 0;
public String name;
}
Unmittelbar nach dem Laden der Klasse
Wenn die Java-Maschine das Laden der Klasse abgeschlossen hat Person
, sieht der Speicher folgendermaßen aus:
Nach dem Erstellen des ersten Objekts
Wenn wir ein Person
Objekt erstellen, sieht das Bild so aus:
Bitte beachten Sie, dass beide Objekte zwar zwei Variablen haben, diese jedoch unterschiedliche Variablen sind: Die gewöhnlichen Objekte haben gewöhnliche Variablen und das statische Objekt hat die statischen Variablen.
Wir brauchen mehr Objekte
Lassen Sie uns zwei weitere Person
Objekte erstellen. Jetzt sieht die Erinnerung so aus:
Bitte beachten Sie, dass jedes Objekt seine eigenen Alters- und Namensvariablen hat.
3. Entfernen und Hinzufügen des static
Modifikators
Von statisch bis gewöhnlich
Was passiert, wenn wir eine statische Variable nehmen und sie in eine gewöhnliche Variable umwandeln, indem wir ihren static
Modifikator entfernen? Zum Beispiel die static int sum
Variable.
Der geänderte Code sieht folgendermaßen aus:
public class Person
{
public static int count = 0;
public int sum = 0;
public int age = 0;
public String name;
}
Jetzt sieht die Erinnerung so aus:
Die statische Variable ist aus dem statischen Objekt verschwunden und jetzt hat jedes gewöhnliche Objekt seine eigene sum
Variable.
Von gewöhnlich bis statisch
Wir können das Gegenteil tun: den static
Modifikator zu gewöhnlichen Variablen einer Klasse hinzufügen. Sie verschwinden von allen gewöhnlichen Objekten und erscheinen im statischen Objekt. Angenommen, wir beschließen, die Variablen und statisch zu machen . age
name
Dann sieht der Code so aus:
public class Person
{
public static int count = 0;
public int sum = 0;
public static int age = 0;
public static String name;
}
Und jetzt sieht die Erinnerung so aus:
GO TO FULL VERSION