Statisch bedeutet „global“ oder „statisch“ und wird zum Ändern von Mitgliedsvariablen und Mitgliedsmethoden verwendet. Es kann auch einen statischen Codeblock bilden, es gibt jedoch kein Konzept für globale Variablen in der Java-Sprache.
Durch Static geänderte Mitgliedsvariablen und Mitgliedsmethoden sind unabhängig von Objekten der Klasse. Das heißt, es hängt nicht von einer bestimmten Instanz der Klasse ab und wird von allen Instanzen der Klasse gemeinsam genutzt.
Solange diese Klasse geladen ist, kann die Java Virtual Machine sie standardmäßig anhand des Klassennamens im Methodenbereich des Laufzeitdatenbereichs finden. Daher kann auf ein statisches Objekt zugegriffen werden, bevor eines seiner Objekte erstellt wird, ohne auf Objekte zu verweisen.
Mit public geänderte statische Mitgliedsvariablen und Mitgliedsmethoden sind im Wesentlichen globale Variablen und globale Methoden. Wenn ein Objekt seiner Klasse deklariert wird, wird keine Kopie der statischen Variablen generiert, sondern alle Instanzen der Klasse verwenden dieselbe statische Variable.
Einer statischen Variablen kann eine private Änderung vorangestellt werden, was bedeutet, dass diese Variable im statischen Codeblock der Klasse oder in anderen statischen Mitgliedsmethoden der Klasse verwendet werden kann (natürlich kann sie auch in nicht statischen verwendet werden). Member-Methoden), aber es kann nicht in anderen Klassen verwendet werden. Es ist wichtig, direkt auf den Klassennamen zu verweisen. Tatsächlich müssen Sie verstehen, dass „privat“ eine Einschränkung der Zugriffsberechtigung bedeutet und „statisch“ bedeutet, dass es ohne Instanziierung verwendet werden kann, was viel einfacher zu verstehen ist. Der Effekt des Hinzufügens anderer Zugriffsberechtigungsschlüsselwörter vor dem statischen Schlüsselwort ist ebenfalls derselbe.
Durch Statik geänderte Mitgliedsvariablen und Mitgliedsmethoden werden üblicherweise als statische Variablen und statische Methoden bezeichnet. Auf sie kann direkt über den Klassennamen zugegriffen werden.
Klassenname. Statischer Methodenname (Parameterliste...)
Klassenname.Statischer Variablenname
Ein mit Static modifizierter Codeblock stellt einen statischen Codeblock dar. Wenn die Java Virtual Machine (JVM) eine Klasse lädt, wird der Codeblock ausgeführt (sehr nützlich, haha).
1. statische Variable
Klassenmitgliedsvariablen können in zwei Typen eingeteilt werden, je nachdem, ob sie statisch sind: Die eine ist eine durch statische Variable modifizierte Variable, die als statische Variable oder Klassenvariable bezeichnet wird, und die andere ist eine nicht durch statische Variable modifizierte Variable, die als Instanzvariable bezeichnet wird.
Der Unterschied zwischen den beiden ist:
Für statische Variablen gibt es nur eine Kopie im Speicher (um Speicher zu sparen). Die Speicherzuweisung für statische Variablen wird während des Ladevorgangs der Klasse abgeschlossen Der Klassenname (praktisch). Natürlich kann auch über Objekte zugegriffen werden (dies wird jedoch nicht empfohlen).
Bei Instanzvariablen wird vor der Erstellung einer Instanz einmal Speicher für die Instanzvariable zugewiesen. Instanzvariablen können mehrere Kopien im Speicher haben, ohne sich gegenseitig zu beeinflussen (flexibel).
Daher werden statische Variablen im Allgemeinen verwendet, wenn die folgenden zwei Funktionen implementiert werden müssen:
1).Beim Teilen von Werten zwischen Objekten
2).Wenn der Zugriff auf Variablen praktisch ist
2. Statische Methode
Statische Methoden können direkt über den Klassennamen aufgerufen werden, und es kann auch jede beliebige Instanz aufgerufen werden.
Daher können die Schlüsselwörter this und super nicht in statischen Methoden verwendet werden, und auf die Instanzvariablen und Instanzmethoden der Klasse, zu der sie gehören, kann nicht direkt zugegriffen werden (d. h. auf Mitgliedsvariablen und Mitgliedsmethoden ohne statische Nur statische Mitgliedsvariablen und). Auf Mitgliedsmethoden der Klasse, zu der sie gehören, kann zugegriffen werden.
Weil Instanzmitglieder bestimmten Objekten zugeordnet sind! Dies muss verstanden und herausgefunden werden, nicht auswendig gelernt! ! !
Da statische Methoden unabhängig von Instanzen sind, müssen statische Methoden implementiert werden und dürfen nicht abstrakt sein.
Um beispielsweise den Methodenaufruf zu erleichtern, sind alle Methoden in der Math-Klasse der Java-API statisch, und statische Methoden innerhalb allgemeiner Klassen erleichtern auch anderen Klassen den Aufruf der Methode.
Eine statische Methode ist ein spezieller Methodentyp innerhalb einer Klasse. Die entsprechende Methode wird nur dann als statisch deklariert. Methoden innerhalb einer Klasse sind im Allgemeinen nicht statisch.
3. Statischer Codeblock
Ein statischer Codeblock wird auch als statischer Anweisungsblock in einer Klasse bezeichnet. Es kann mehrere geben und an keiner Stelle platziert werden wird ausgeführt, wenn die JVM die Klasse lädt. Wenn mehrere statische Codeblöcke vorhanden sind, führt die JVM diese in der Reihenfolge aus, in der sie in der Klasse erscheinen, und jeder Codeblock wird nur einmal ausgeführt. Zum Beispiel:
public class Test5 { private static int b; Test5 t=new Test5(); println(tb); } static{ Test5.a=4; System.out.println(a); } public static void main(String[] args) { // TODO Methoden-Stubs automatisch generieren} static{ Test5.a=5; System.out.println(a); public void f(){ System.out.println("hhahhahah" } }
Laufergebnisse:
3
hhahhahah
1000
4
5
Sie können statische Codeblöcke verwenden, um einigen statischen Variablen Werte zuzuweisen. Schauen Sie sich abschließend diese Beispiele an. Sie verfügen alle über eine statische Hauptmethode, sodass die JVM diese beim Ausführen der Hauptmethode direkt aufrufen kann .
4. Was bedeuten „static“ und „final“ bei gemeinsamer Verwendung?
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 darauf zugegriffen werden kann.
Für Methoden bedeutet dies, dass sie nicht überschreibbar sind 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.
Als statisch deklarierte Variablen sind im Wesentlichen globale Variablen. Wenn ein Objekt deklariert wird, wird keine Kopie der statischen Variablen erstellt, sondern alle Instanzvariablen der Klasse verwenden dieselbe statische Variable gemeinsam. Für statisch deklarierte Methoden gelten die folgenden Einschränkungen:
1).Sie können nur andere statische Methoden aufrufen.
2).Sie können nur auf statische Daten zugreifen.
3).Sie können in keiner Weise auf this oder super verweisen (das Schlüsselwort super hängt mit der Vererbung zusammen und wird im nächsten Kapitel beschrieben).
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:
// Statische Variablen, Methoden und Blöcke demonstrieren. class UseStatic { static int a = 3; static int b; println("a = " + a); System.out.println("b = " + b); static { System.out.println("Statischer Block initialisiert."); } 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 (Ausgabe einer Nachricht) und schließlich wird b auf a*4 oder 12 initialisiert. Dann wird main() aufgerufen, 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:
Kopieren Sie den Codecode wie folgt:
Statischer Block initialisiert.
x = 42
a=3
b = 12
Statische Methoden und Variablen können unabhängig von Objekten 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:
Kopieren Sie den Codecode wie folgt:
Klassenname.method()
Hier ist Klassenname der Name der Klasse, in der die statische Methode definiert ist. 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.
Unten finden Sie 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);
Hier ist die Ausgabe dieses Programms:
Kopieren Sie den Codecode wie folgt:
a=42
b = 99
Auf statische Mitglieder kann von Instanzen, die von ihrer Klasse erstellt wurden, nicht zugegriffen werden.
Wenn die Mitglieder ohne statische Änderung Objektmitglieder sind, gehören sie jedem Objekt.
Mit Static geänderte Mitglieder sind Klassenmitglieder, was bedeutet, dass sie direkt von einer Klasse aufgerufen werden können und allen Objekten gemeinsam sind.