Statisches Finale wird zum Ändern von Mitgliedsvariablen und Mitgliedsmethoden verwendet, die einfach als „globale Konstanten“ verstanden werden können!
Für Variablen bedeutet dies, dass ein einmal angegebener Wert nicht mehr geändert werden kann und über den Klassennamen aufgerufen werden kann.
Für Methoden bedeutet dies, dass sie nicht überschrieben werden können und direkt über den Klassennamen aufgerufen werden können.
Manchmal möchten Sie ein Klassenmitglied so definieren, dass seine Verwendung völlig unabhängig von Objekten dieser Klasse ist. Normalerweise muss auf ein Klassenmitglied über ein Objekt seiner Klasse zugegriffen werden, es ist jedoch möglich, ein Mitglied zu erstellen, das allein verwendet werden kann, ohne auf eine bestimmte Instanz zu verweisen. Ein solches Mitglied kann erstellt werden, indem das Schlüsselwort static (statisch) vor der Deklaration des Mitglieds hinzugefügt wird. Wenn ein Mitglied als statisch deklariert ist, kann auf es zugegriffen werden, bevor ein Objekt seiner Klasse erstellt wird, ohne dass auf ein Objekt verwiesen werden muss. Sie können sowohl Methoden als auch Variablen als statisch deklarieren. Das häufigste Beispiel für ein statisches Mitglied ist main(). Da main() aufgerufen werden muss, wenn das Programm mit der Ausführung beginnt, wird es als statisch deklariert.
Eine als statisch deklarierte Variable ist im Wesentlichen eine globale Variable. Wenn ein Objekt deklariert wird, wird keine Kopie der statischen Variablen generiert, sondern alle Instanzvariablen der Klasse teilen sich dieselbe statische Variable. Als statisch deklarierte Methoden unterliegen den folgenden Einschränkungen:
· Sie können nur andere statische Methoden aufrufen.
· Sie können nur auf statische Daten zugreifen.
· Sie können sich in keiner Weise auf this oder super beziehen (das Schlüsselwort super hängt mit der Vererbung zusammen, die im nächsten Kapitel beschrieben wird).
Wenn Sie Ihre statischen Variablen durch Berechnung initialisieren müssen, können Sie einen statischen Block deklarieren. Der statische Block wird nur einmal ausgeführt, wenn die Klasse geladen wird. Das folgende Beispiel zeigt eine Klasse mit einer statischen Methode, einigen statischen Variablen und einem statischen Initialisierungsblock:
class UseStatic { static int a = 3; static int b; static void meth(int x) { System.out.println("x = " + x); System.out.println("a = " + a); System.out.println("b = " + b); } static { System.out.println("Static block initialized."); b = a * 4; } public static void main(String args[]) { meth(42); } }
Sobald die UseStatic-Klasse geladen ist, werden alle statischen Anweisungen ausgeführt. Zuerst wird a auf 3 gesetzt, dann wird der statische Block ausgeführt (Drucken einer Nachricht) und schließlich wird b auf a*4 oder 12 initialisiert. Rufen Sie dann main() auf, main() ruft meth() auf und übergibt den Wert 42 an x. Die drei println()-Anweisungen beziehen sich auf zwei statische Variablen a und b sowie die lokale Variable x.
Hinweis: Es ist illegal, in einer statischen Methode auf Instanzvariablen zu verweisen.
Hier ist die Ausgabe dieses Programms:
Static block initialized. x = 42 a = 3 b = 12
Statische Methoden und Variablen können unabhängig von jedem Objekt außerhalb der Klasse verwendet werden, in der sie definiert sind. Auf diese Weise fügen Sie einfach den Punktoperator nach dem Klassennamen hinzu. Wenn Sie beispielsweise eine statische Methode von außerhalb der Klasse aufrufen möchten, können Sie das folgende allgemeine Format verwenden:
classname.method( )
Hier Klassenname ist der Klassenname. Definieren Sie die statische Methode in dieser Klasse. Wie Sie sehen, ähnelt dieses Format dem Format zum Aufrufen nichtstatischer Methoden über Objektreferenzvariablen. Auf eine statische Variable kann im gleichen Format zugegriffen werden – der Klassenname gefolgt vom Punktoperator. Auf diese Weise implementiert Java eine kontrollierte Version globaler Funktionen und globaler Variablen.
Das Folgende ist ein Beispiel. In main() wird außerhalb ihrer Klassen auf die statische Methode callme() und die statische Variable b zugegriffen.
class StaticDemo { static int a = 42; static int b = 99; static void callme() { System.out.println("a = " + a); } } class StaticByName { public static void main(String args[]) { StaticDemo.callme(); System.out.println("b = " + StaticDemo.b); } }
Das Folgende ist die Ausgabe des Programms:
a = 42 b = 99
Auf statische Mitglieder kann nicht von Instanzen zugegriffen werden, die von der Klasse erstellt wurden, in der sie sich befinden.
Wenn die Mitglieder ohne statische Änderung Objektmitglieder sind, gehören sie jedem Objekt.
Mit Static geänderte Mitglieder sind Klassenmitglieder, die direkt von einer Klasse aufgerufen werden können und allen Objekten gemeinsam sind.
Das obige ist der detaillierte Inhalt vonWelchen Effekt erzielen static und final, wenn sie in Java zusammen verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!