Static ist ein weiteres wichtiges Schlüsselwort in Java. Es kann die laufende Leistung des Programms verbessern und die Struktur des Programms optimieren. Die Hauptanwendungen sind wie folgt:
1. Die von statischen Modifikationen modifizierten Mitgliedsvariablen, als Klassenvariablen/statische Variablen bezeichnet, um die Freigabe aller Objekte an dieses Mitglied zu verwirklichen.
2. Die durch statische MITGLEIBENE MITS -Methode, die als Klassenmethode/statische Methode bezeichnet wird, kann direkt über den Klassennamen aufgerufen werden, ohne ein Objekt zu erstellen.
3. Formieren Sie statische Codeblöcke, um die Programmleistung zu optimieren.
4. Statische Lead -Pakete importieren im Allgemeinen Klassenmethoden direkt in die aktuelle Klasse, so dass die Klassenmethoden direkt mit dem Methodennamen aufgerufen werden können, der bequemer ist.
5. Ändern Sie die innere Klasse und rufen Sie die innere Klasse an, ohne die äußere Klasse zu instanziieren.
Die folgende Codebeschreibung ist beigefügt:
öffentlicher Klassenstudent {String Name; statisches Int -Alter; public String toString () {return "Name:" + name + ", Alter:" + Alter; } public static void main (string [] args) {student s1 = new student (); S1.Name = "Zhang San"; s1.age = 20; Schüler S2 = neuer Schüler (); s2.name = "li si"; s2.age = 10; System.out.println (S1); System.out.println (S2); }}/** Ausgabeergebnis Name: Zhang San, Alter: 10Name: li si, Alter: 10*/Wie oben erwähnt, werden die beiden Objekte S1 und S2 in verschiedenen Adressen im Haufenbereich im Speicher gespeichert, sodass sie sich nicht gegenseitig beeinträchtigen. Das statische Schlüsselwort modifiziert jedoch das Alter variable Altersalter, wodurch es eher gehört, und das Objekt gehört ihm, und jedes Objekt in der Instanz dieser Klasse kann geteilt und verwendet werden. Daher sind die Ausgangsalter alle endgültig zugegeben. Wenn Sie statisch entfernen, wirken sich die Objekte offensichtlich nicht gegenseitig aus, und die Ausgabe lautet wie folgt:
Name: Zhang San, Alter: 20Name: Li Si, Alter: 10
Wie oben erwähnt, ist ein Fehler aufgetreten, wenn Out1 ausruft 2. Aus diesem Code ist ersichtlich, dass statische Methoden nicht statische Mitgliedsvariablen und Mitgliedsmethoden aufrufen können. Nichtstatische Methoden können statische Mitgliedsvariablen und Mitgliedsmethoden aufrufen. Beachten Sie, dass Static nicht die Zugriffsrechte von Mitgliedern beeinflusst. Die Schlüsselwörter, die die Zugriffsrechte in Java beeinflussen können, sind privat, öffentlich, geschützt und standardmäßig.
Der öffentliche Klasse -Test erweitert die Basis {static {System.out.println ("statischer statischer Block 1"); } public test () {System.out.println ("Testkonstruktor"); } public static void main (String [] args) {new Test (); }} Klasse Base {static {System.out.println ("statischer statischer Block 2"); } public base () {System.out.println ("Basiskonstruktor"); }}Wie oben erwähnt, denken Sie an zwei Sätze, der statische Codeblock wird mit dem Laden der Klasse geladen. Die durch statische modifizierte variable Methode wird zuerst und nur einmal geladen als andere Variablenmethoden. Wenn eine Unterklasse geladen wird, wird die übergeordnete Klasse zuerst geladen. Daraus können wir analysieren: Zu Beginn der Ausführung müssen wir zunächst die Hauptmethode finden, da die Hauptmethode der Eingang zum Programm ist. Bevor wir jedoch die Hauptmethode ausführen, müssen wir zuerst die Testklasse laden. Beim Laden der Testklasse stellen wir fest, dass die Testklasse von der Basisklasse erbt, sodass wir zuerst die Basisklasse laden. Beim Laden der Basisklasse stellen wir fest, dass es einen statischen Block gibt und dann den statischen Block ausführen. Nachdem die Basisklasse geladen ist, wird die Testklasse weiter geladen und stellt dann fest, dass es statische Blöcke in der Testklasse gibt, sodass der statische Block ausgeführt wird. Nach dem Laden der erforderlichen Klasse beginnt die Hauptmethode auszuführen. Bei der Ausführung neuer Tests () in der Hauptmethode wird der Konstruktor der übergeordneten Klasse zuerst und dann der eigene Konstruktor aufgerufen. Daher sind die Betriebsergebnisse wie folgt:
statischer statischer Block 2statischer statischer Block 1Base -Konstruktor -Testkonstruktor
/* A.Java -Datei*/Paket com.dogo.test; public class a {public static void Outword (Objekt o) {System.out.println (o); }}/*B.java Datei*/Importieren Sie statische com.dogo.test.a.*; Öffentliche Klasse B {public static void main (String [] args) {outword ("Hallo Welt!"); } /** Ausgabe*Hallo Welt! */}Wie oben erwähnt, enthält A.Java eine einfache statische Methode. In B.Java verwenden wir das statische Schlüsselwort, um die Klasse A zu importieren. Daher muss der "Klassenname. Methodenname" nicht verwendet werden, um die Klassenmethode aufzurufen. Sie können den "Methodennamen" direkt verwenden, um die Klassenmethode aufzurufen, genau wie die eigene Methode der Klasse.
/*Outer.java*/public class ober {static {System.out.println ("äußerer statischer Block"); } public outer () {System.out.println ("äußerer Konstruktor"); } statische Klasse Inner {static {System.out.println ("innerer statischer Block"); } public inner () {System.out.println ("Inner Constructor"); }}}/*Test.java*/public class test {public static void main (String [] args) {new outer.inner (); }}Wie oben erwähnt, denken Sie daran, die innere Klasse mit statischer Klassen zu ändern. Die äußere Klasse kann die innere Klasse direkt aufrufen, da die durch statische gemeldete innere Klasse während des Ladens der äußeren Klasse geladen wird, sodass Sie die statische innere Klasse direkt aufrufen können, ohne die äußere Klasse zu instanziieren. Lasten Sie im Beispiel vor der Eingabe der Haupttestmethode die Testklasse und führen Sie dann New Outer.inner () aus; Beachten Sie hier: Da innere statisch ist, müssen hier keine externen Klassen geladen und externe Klassen instanziiert. Innen kann direkt geladen und instanziiert werden. Die Betriebsergebnisse sind wie folgt:
Innerer statischer Block innerer Konstruktor
DA QIAO Hinweis: Eine weitere sehr wichtige Anwendung von Static besteht darin, das Singleton -Designmuster zu implementieren. Das Merkmal des einzelnen Interessens ist, dass die Klasse nur eine Instanz haben kann. Um diese Funktion zu erkennen, muss der Klassenkonstruktor verborgen sein, dh der Konstruktor wird als privat erklärt und bietet eine Methode zum Erstellen eines Objekts. Da der Konstruktor als privat deklariert wird, kann die Außenwelt kein Objekt dieser Art direkt erstellen und kann das Klassenobjekt nur über die von der Klasse bereitgestellten Methoden erhalten. Daher kann die Methode zum Erstellen eines Objekts nur als statisch deklariert werden. Das Programmbeispiel lautet wie folgt:
Klasse Singledemo {private statische Singledemo Ins = NULL; private singledemo () {} public static Singledemo getins () {if (iNS == null) {Ins = new Singledemo (); } return Ins; }}