Java statische Schlüsselwörter und Java statische Variablen und statische Methoden
Der statische Modifikator kann mit Variablen und Methoden verwendet werden, um anzuzeigen, dass er "statisch" ist.
Auf statische Variablen und statische Methoden können über Klassennamen zugegriffen werden. Es ist nicht erforderlich, ein Objekt einer Klasse zu erstellen, um auf die statischen Mitglieder der Klasse zuzugreifen. Daher werden die von statischen Modellen geänderten Mitglieder auch als Klassenvariablen und Klassenmethoden bezeichnet. Statische Variablen unterscheiden sich von Instanzvariablen, und Instanzvariablen werden immer über Objekte zugegriffen, da ihre Werte zwischen Objekten variieren.
Bitte beachten Sie das folgende Beispiel:
public class Demo {static int i = 10; i);
Auslaufergebnisse:
Klassenvariable i = 10 Instanzvariable j = 20
statische Speicherzuweisung
Statische Variablen gehören zum Klassen und gehören nicht zu unabhängigen Objekten, sodass Sie auf statische Variablen zugreifen können, ohne Instanzen der Klasse zu erstellen. Dieses Ergebnis liegt daran, dass der Compiler nur eine Kopie statischer Variablen für die gesamte Klasse erstellt, dh nur einen Speicherplatz zugewiesen. Instanzvariablen sind jedes Mal, wenn ein Objekt erstellt wird, der Speicherplatz zugewiesen.
Bitte beachten Sie den folgenden Code:
öffentliche Klasse {statische int i; ; obj2 .j = " + obj2.j);}}
Auslaufergebnisse:
obj1.i = 10, obj1.j = 20obj2.i = 10, obj2.j = 0
Hinweis: Obwohl auf statische Variablen auch über Objekte zugegriffen werden können, werden sie nicht empfohlen und der Compiler wird auch Warnungen erzeugen.
Im obigen Code ist ich eine statische Variable. Dies liegt daran, dass obj1.i und obj2. ich auf denselben Speicherplatz hinweisen, während obj1.j und obj2.j auf verschiedene Speicherbereiche hinweisen.
Hinweis: Die statische Variable wird initialisiert, wenn die Klasse geladen wird. Das heißt, solange die Klasse geladen ist, wird sie initialisiert, unabhängig davon, ob Sie diese statische Variable verwenden oder nicht.
Zusammenfassung: Klassenvariablen werden mit dem Schlüsselwort statisch geändert. Änderungen an Variablen wirken sich auf andere Objekte aus. Es gibt zwei Möglichkeiten, auf extern zugreifen zu können: Zugriff über Objekte oder über Klassennamen zugreifen.
Statische Methode
Eine statische Methode ist eine Methode, die keine Operationen für ein Objekt ausführen kann. Beispielsweise ist die POW () -Methode der Mathematikklasse eine statische Methode mit einer Syntax von Mathematik. Objekte bei Verwendung.
Da statische Methoden keine Objekte betreiben können, können Instanzvariablen nicht in statischen Methoden zugegriffen werden und können nur auf statische Variablen ihrer eigenen Klasse zugreifen.
Die statische Methode kann in den folgenden Situationen verwendet werden:
Eine Methode muss nicht auf den Objektzustand zugreifen, und ihre erforderlichen Parameter werden durch explizite Parameter bereitgestellt (z. B. math.pow ()).
Eine Methode muss nur auf statische Variablen der Klasse zugreifen.
Die Leser müssen bemerkt haben, dass Main () auch eine statische Methode ist, die bei Objekten nicht funktioniert. Tatsächlich gibt es zum Zeitpunkt des Programmstarts keine Objekte, die Main () -Methode ist der Eintrag zum Programm und wird ausgeführt und die vom Programm erforderlichen Objekte werden erstellt.
Zusammenfassung statischer Variablen und statischer Methoden:
Eine statische Methode einer Klasse kann nur auf statische Variablen zugreifen.
Eine statische Methode einer Klasse kann nicht direkte Methoden aufrufen.
Wenn die Erlaubnis zur Zugriffskontrolle ermöglicht, können auch über Objekte statische Variablen und statische Methoden zugegriffen werden, werden jedoch nicht empfohlen.
Das aktuelle Objekt existiert in der statischen Methode nicht, daher kann dies nicht verwendet werden, und natürlich kann Super nicht verwendet werden.
Statische Methoden können nicht durch nicht statische Methoden überschrieben werden.
Der Konstruktor erlaubt die statische Erklärung nicht;
Lokale Variablen können nicht mit statischer geändert werden.
Beispiele für statische Methoden:
public class Demo {statische int sum (int x, int y) {return x + y; "10 + 10 =" + sum);
Auslaufergebnisse:
10+10 = 20
Die statische Methode erfordert keine Instanz der Klasse, zu der sie angehört wird. Es wird also aufgerufen, sodass kein Wert davon vorhanden ist, und auf die Instanzvariable kann nicht zugegriffen werden, andernfalls verursacht sie einen Kompilierungsfehler.
Hinweis: Instanzvariablen können nur über Objekte zugegriffen werden und können nicht über Klassen zugegriffen werden.
Statischer Initialisierer (statischer Block)
Ein Block ist ein Stück Code, das von Zahnspangen umgeben ist. Ein statischer Initialisierer ist ein statischer Block, der in einer Klasse und außerhalb einer Methode existiert. Statische Initialisierer werden nur einmal ausgeführt, wenn die Klasse geladen wird (wenn die Klasse zum ersten Mal verwendet wird) und häufig verwendet, um statische Variablen zu initialisieren.
Beispielcode:
public class Demo {public int i; " + i);} public static void main (String [] args) {System.out.println (" Demo.i = " + Demo.i); New Demo (). test ();}}
Das Ergebnis der Operation ist:
Jetzt in statischer Block.demo.i = 10test Methode: i = 10
Statischer Import
Der statische Import ist ein neues Merkmal von Java 5, das zum Importieren statischer Variablen und statischer Klassenmethoden verwendet wird.
Im Allgemeinen schreiben wir dies in Importklassen:
PackageName.ClassName importieren; // Importieren Sie eine bestimmte Klasse
oder
Paketenname importieren.*// Importieren Sie alle Klassen in das Paket
Und statischer Import kann so geschrieben werden:
statische Packagename importieren.methonname;
oder
statische Packagename importieren.
Nach dem Import können Sie die statische Methode direkt mit dem Methodennamen in der aktuellen Klasse aufrufen, und Sie müssen nicht mehr ClassName.methodName verwenden, um darauf zuzugreifen.
Für häufig verwendete statische Variablen und statische Methoden können sie statisch importiert werden. Der Vorteil des statischen Imports ist, dass es einige Vorgänge vereinfachen kann, z. B. das Output -Anweisungssystem. und direkt das nächste Mal.
Bitte beachten Sie den folgenden Code:
statische java.lang.System importieren. );}}
Auslaufergebnisse:
Eine zufällige Zahl erzeugt: 0.05800891549018705
Java Final Keyword: Blockeritanz und Polymorphismus <BR /> In Java können beim Deklarieren von Klassen, Variablen und Methoden das Schlüsselwort Finale verwendet werden, um es zu ändern. Die durch die endgültigen Daten geänderten Daten haben die Eigenschaften des "endgültigen Zustands" und bedeutet "endgültig". Die spezifischen Vorschriften sind wie folgt:
Die durch das Finale modifizierte Klasse kann nicht geerbt werden.
Die endgültige Modifikationsmethode kann nicht durch Unterklassen neu geschrieben werden.
Die durch endgültige (Mitgliedsvariablen oder lokale Variablen) modifizierte Variable wird zu einer Konstante und kann nur einmal zugewiesen werden.
Die durch die endgültige Änderung der Mitgliedsgröße modifizierte Mitgliedsvariable muss gleichzeitig mit der Deklaration zugewiesen werden. gebraucht.
Die durch das Finale geänderte lokale Variable kann nur erklären, dass sie nicht zugewiesen wird, und dann gleichzeitig zugewiesen werden.
Das endgültige endgültige wird im Allgemeinen verwendet, um Daten zu ändern, die nicht nach Belieben geändert werden können, um Missbrauch zu vermeiden, wie z. B. Methoden zur Implementierung mathematischer Dreiecksmethoden, Exponentiationsvorgänge und anderer Funktionen sowie mathematischer Konstante π = 3,141593, E = 2,71828 et al.
Um den endgültigen Zustand zu gewährleisten, wurde die Java.lang.Math -Klasse, die die oben genannten Methoden und Konstanten bereitstellt, ebenfalls als endgültig definiert.
Es ist zu beachten, dass, wenn eine Variable, die auf einen Typ (der Typ einer Klasse) verweist, als endgültig markiert ist, die Variable auf kein anderes Objekt verweisen kann. Der Inhalt des Objekts kann jedoch geändert werden, da nur die Referenz selbst endgültig ist.
Wenn die Variable endgültig markiert ist, soll das Ergebnis eine Konstante machen. Wenn Sie den Wert der endgültigen Variablen ändern, wird ein Kompilierungsfehler verursacht. Hier ist ein Beispiel für die korrekte Definition der endgültigen Variablen:
public Final int max_array_size = 25;
Konstanten können nicht vererbt werden, weil sie endgültige Änderungen haben.
Bitte beachten Sie den folgenden Code:
öffentliche Klasse Demo {öffentliche endgültige Int Total_Number = 5; = ++ Total_Number; Sekundäre Zuordnung durchführen}}
Das Finale kann auch verwendet werden, um Klassen (vor dem Schlüsselwort der Klasse) zu verhindern, dass die Klasse die Unterklassen abgeleitet hat. Dies geschieht aus Sicherheitsgründen, da es notwendig ist, sicherzustellen, dass nach einer String -String eine Zeichenfolge der Klassenzeichenfolge sein muss, nicht um eine Zeichenfolge einer anderen Klasse (die String -Klasse kann böswillig vererbt und manipuliert werden).
Methoden können auch durch die endgültige Methode geändert werden, und die durch den endgültigen Verfahren modifizierten Methoden können nicht überschrieben werden. Sobald eine Klasse als endgültig deklariert ist, werden die in dieser Klasse enthaltenen Methoden auch implizit als endgültig erklärt, die Variable jedoch nicht.
Die durch die endgültige Methode modifizierte Methode ist die statische Bindung und erzeugt kein Polymorphismus (dynamische Bindung). In Java werden Methoden, die durch statische oder private modifiziert werden, implizit als endgültig erklärt, da dynamische Bindung keine Bedeutung hat.
Da die dynamische Bindung Ressourcen verbraucht und häufig nicht notwendig ist, sind einige Programmierer der Ansicht, dass nicht ausreichend Grund für die Verwendung von Polymorphismus besteht, alle Methoden mit endgültig geändert werden sollten.
Dieses Verständnis ist etwas extrem, da der sofortige Compiler im JVM die Betriebsinformationen des Programms in Echtzeit überwachen und die Vererbungsbeziehung zwischen Klassen genau kennen kann. Wenn eine Methode nicht überschrieben und kurz ist, kann der Compiler sie optimieren, was als Inlining bezeichnet wird. Beispielsweise wird ein Inline -Aufruf an e.getName () durch den Zugriff auf die E.Name -Variable ersetzt. Dies ist eine aussagekräftige Verbesserung, da die von der CPU verwendete Zweigübertragung bei der Bearbeitung von Anweisungen, bei denen Methoden aufgerufen werden, die Richtlinie des Vorab -Anweisung stören, sodass dies als unpopulär angesehen wird. Wenn jedoch GetName () in einer anderen Klasse überschrieben wird, kann der Compiler nicht wissen, was der überschriebene Code bewirkt wird, sodass er nicht eingebaut werden kann.