Das statische Schlüsselwort ist ein Schlüsselwort, dem viele Freunde beim Schreiben und Lesen von Code begegnen. Es ist auch einer der Wissenspunkte, die Interviewer von großen Unternehmen während der Interviews gerne fragen. Lassen Sie uns zunächst über die Verwendung statischer Schlüsselwörter und der allgemeinen Missverständnisse sprechen. Schließlich listen wir im schriftlichen Interview einige gängige Testfragen zu Static auf. Hier ist der Verzeichnisriss dieses Artikels:
1. Der Zweck statischer Schlüsselwörter
2. Missverständnisse statischer Schlüsselwörter
3.. Common schriftliche Interviewfragen
Wenn es etwas Falsches gibt, hoffe ich, Kritik und Korrektur zu verstehen und willkommen zu heißen.
Bitte respektieren Sie die Arbeitser Leistungen des Autors. Bitte geben Sie den ursprünglichen Link beim Nachdruck an:
http://www.cnblogs.com/dolphin0520/p/3799052.html
1. Der Zweck statischer Schlüsselwörter
"Die statische Methode ist eine Methode ohne diese. Nichtstatische Methoden können innerhalb der statischen Methode nicht aufgerufen werden, was wiederum möglich ist. Und die statische Methode kann nur über die Klasse selbst aufgerufen werden, ohne ein Objekt zu erstellen. Dies ist tatsächlich der Hauptzweck der statischen Methode."
Obwohl diese Passage nur die besonderen Merkmale der statischen Methode veranschaulicht, ist ersichtlich, dass die Grundfunktion des statischen Schlüsselworts. Kurz gesagt, es wird in einem Satz beschrieben:
Es ist bequem, aufzurufen (Methode/Variable), ohne ein Objekt zu erstellen.
Offensichtlich müssen Methoden oder Variablen, die durch statische Schlüsselwörter modifiziert wurden, nicht auf Objekte für den Zugriff stützen. Solange die Klasse geladen ist, können sie über den Klassennamen zugegriffen werden.
STATIC kann verwendet werden, um Klassenmitgliedmethoden und Klassenmitgliedvariablen zu ändern. Darüber hinaus können statische Codeblöcke geschrieben werden, um die Programmleistung zu optimieren.
1) Statische Methode
Die statische Methode wird allgemein als statische Methode bezeichnet. Da auf statische Methoden zugegriffen werden können, ohne sich auf ein Objekt zu verlassen, gibt es für statische Methoden keine dieser, da es nicht von einem Objekt abhängt. Da es keine Objekte gibt, gibt es keines. Aufgrund dieses Merkmals können nicht statische Mitgliedsvariablen und nicht statische Mitgliedsmethoden der Klasse nicht in statischen Methoden zugegriffen werden, da nicht statische Mitgliedermethoden/Variablen auf bestimmte Objekte beruhen müssen, die aufgerufen werden sollen.
Es ist jedoch zu beachten, dass zwar auf nicht statische Mitgliedsmethoden und nicht statische Mitgliedsvariablen bei statischen Methoden nicht zugegriffen werden können, auf statische Mitgliedermethoden/Variablen bei nicht statischen Mitgliedern zugegriffen werden können. Lassen Sie uns ein einfaches Beispiel geben:
Da die Print2 -Methode im obigen Code unabhängig vom Objekt existiert, kann sie direkt mit dem Klassennamen aufgerufen werden. Wenn bei statischen Methoden nicht statische Methoden/Variablen zugegriffen werden können, gibt es in der Hauptmethode die folgende Anweisung:
MyObject.print2 ();
Zu diesem Zeitpunkt gibt es kein Objekt, und Str2 existiert überhaupt nicht, daher wird es einen Widerspruch geben. Gleiches gilt für Methoden. Da Sie nicht vorhersagen können, ob nicht statische Mitgliedervariablen in der Print1-Methode zugegriffen werden, ist auch auf nicht statische Mitgliedsmethoden in statischen Mitgliedsmethoden zugegriffen.
Und für nicht statische Mitgliedermethoden ist es offensichtlich unbegrenzt, auf statische Mitgliedermethoden/Variablen zuzugreifen.
Wenn Sie also eine Methode aufrufen möchten, ohne ein Objekt zu erstellen, können Sie diese Methode auf static festlegen. Unsere häufigste statische Methode ist die Hauptmethode. Warum die Hauptmethode statisch sein muss, ist es jetzt sehr klar. Da das Programm bei der Ausführung der Hauptmethode kein Objekt erstellt, kann es nur über den Klassennamen zugegriffen werden.
Denken Sie auch daran, dass der Konstruktor der Klasse auch dann eine statische Methode ist, selbst wenn es nicht als statisch angezeigt wird.
2) statische Variablen
Statische Variablen werden auch als statische Variablen bezeichnet. Der Unterschied zwischen statischen Variablen und nicht statischen Variablen besteht darin, dass statische Variablen von allen Objekten geteilt werden, wobei nur eine Kopie im Speicher initialisiert wird, wenn nur dann initialisiert wird, wenn die Klasse zum ersten Mal geladen wird. Nichtstatische Variablen sind Objekte im Besitz von Objekten und werden beim Erstellen von Objekten initialisiert. Es gibt mehrere Kopien, und die Kopien, die jedes Objekt gehören, beeinflussen sich nicht gegenseitig.
Die Initialisierungsreihenfolge statischer Mitgliedsvariablen wird in der definierten Reihenfolge initialisiert.
3) statischer Codeblock
Eine weitere Schlüsselfunktion des statischen Schlüsselworts besteht darin, statische Codeblöcke zu bilden, um die Programmleistung zu optimieren. Der statische Block kann überall in der Klasse platziert werden, und es kann in der Klasse mehrere statische Blöcke geben. Wenn die Klasse zum ersten Mal geladen wird, wird jeder statische Block in der Reihenfolge statischer Blöcke ausgeführt und nur einmal ausgeführt.
Der Grund, warum statische Blöcke verwendet werden können, um die Programmleistung zu optimieren, liegt in ihrer Eigenschaft: Sie werden nur einmal ausgeführt, wenn die Klasse geladen ist. Hier ist ein Beispiel:
Klasse Person {private date birthdate; public person (Datum birthDate) {this.birthdate = birthdate;} boolean isboBoomer () {Date startDate = Date.ValueOf ("1946"); Datum Enddate = Date.valueof ("1964"); 0;}} Isbornboomer wird daran gewöhnt, ob diese Person 1946-1964 geboren wurde. Jedes Mal, wenn Isbornboomer aufgerufen wird, werden zwei Objekte erzeugt, die Platzverschwendung verursachen. Wenn dies geändert wird, wird es besser:
Klasse Person {private Datum birthdate; privates statisches Datum Startdate, Enddate; static {startDate = date.valueof ("1946"); Enddate = Date birthday.comPareto (Enddate) <0;}} Daher werden einige Male einige Initialisierungsvorgänge, die nur einmal durchgeführt werden müssen, im statischen Codeblock platziert.
2. Missverständnisse statischer Schlüsselwörter
1. Wird das statische Schlüsselwort die Zugriffsrechte von Mitgliedern in der Klasse ändern?
Einige Anfänger verwechseln die Statik in Java mit statischen Schlüsselwortfunktionen in C/C ++. Denken Sie hier an eine Sache: Im Gegensatz zu statischer In C/C ++ wirkt sich das statische Schlüsselwort in Java nicht auf den Umfang der Variablen oder Methoden aus. In Java sind die einzigen Schlüsselwörter, die die Zugriffsberechtigungen beeinflussen können, privat, öffentlich und geschützt (einschließlich Paketzugriffsberechtigungen). Schauen Sie sich die folgenden Beispiele an, um zu verstehen:
Der Eingabeaufforderungsfehler "Person.age ist nicht sichtbar", was bedeutet, dass das statische Schlüsselwort die Zugriffsberechtigungen von Variablen und Methoden nicht ändert.
2. Können auf statische Mitgliedsvariablen zugegriffen werden?
Können es bei statischen Methoden jedoch nicht vorhanden sind, können auf statische Mitgliedsvariablen bei nicht statischen Methoden zugegriffen werden? Schauen wir uns zunächst das folgende Beispiel an. Was ist das Ergebnis dieser Codeausgabe?
public class main {static int value = 33; public static void main (String [] args) löst Ausnahme aus {new Main (). printValue ();} private void printValue () {int value = 3; System.out.println (this.value);}} 33
Dies ist hauptsächlich das Hauptbeobachtungsteam, um dies und statisch zu verstehen. Wofür steht das? Dies repräsentiert das aktuelle Objekt. Wenn PrintValue über New Main () aufgerufen wird, ist das aktuelle Objekt das von New Main () generierte Objekt. Die statische Variable wird vom Objekt genossen, sodass der Wert dieses Wertes in PrintValue zweifellos 33 beträgt. Der Wert innerhalb der PrintValue -Methode ist eine lokale Variable und kann damit überhaupt nicht verknüpft werden. Daher ist der Ausgang 33. Erinnern Sie sich immer an eine Sache. Alle statischen Methoden und statischen Variablen können über Objekte zugegriffen werden (solange die Zugriffsberechtigungen ausreichen).
3. Kann statische lokale Variablen statisch wirken?
In C/C ++ kann static lokale Variablen grenzen, aber denken Sie daran, dass in Java: static nicht verwendet werden darf, um lokale Variablen zu modifizieren. Fragen Sie nicht warum, dies ist die Bereitstellung der Java -Syntax.
3.. Common schriftliche Interviewfragen
Im Folgenden sind einige Fragen zu statischen Schlüsselwörtern aufgeführt, die im schriftlichen Interview häufig auftreten. Sie sind nur als Referenz. Wenn Sie Nahrungsergänzungsmittel haben, hinterlassen Sie bitte eine Nachricht unten.
1. Was ist das Ausgabeergebnis des folgenden Code?
Der öffentliche Klassen -Test erweitert die Basis {static {System.out.println ("Test static");} public test () {System.out.println ("Testkonstruktor");} public static void main (String [] args) {new test ();} Klassenbasis {static {system.out.Println ("Base static"; Base () {System.out.println ("Basiskonstruktor");}} Basis statisch
Testen Sie statisch
Basiskonstruktor
Testkonstruktor
Was dieses Ergebnis betrifft, lassen Sie uns es nicht zuerst diskutieren. Überlegen wir uns über den spezifischen Ausführungsprozess dieses Codes. 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, muss die Testklasse zuerst geladen werden. Beim Laden der Testklasse wird festgestellt, dass die Testklasse von der Basisklasse erbt, sodass sie zuerst die Basisklasse laden kann. Beim Laden der Basisklasse wird festgestellt, dass es einen statischen Block gibt und dann den statischen Block ausführt. 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 erscheint das obige Ausgangsergebnis.
2. Was ist das Ausgabeergebnis dieses Code?
public class test {Person person = new Person ("test"); static {System.out.println ("Test static");} public test () {System.out.println ("Testkonstruktor");} public static void Main (String [] args) {new myclass (); Person (String Str) {System.out.println ("Person"+str);}} Klasse Myclass erweitert den Test {Person Person = new Person ("myclass"); Testen Sie Static 1
Testen Sie statisch 2
Obwohl es in der Hauptmethode keine Aussagen gibt, werden sie weiterhin ausgegeben, da der Grund oben erklärt wurde. Darüber hinaus kann der statische Block überall in der Klasse erscheinen (solange er sich nicht in der Methode befindet, denken Sie daran, dass keine Methode dies tun kann) und die Ausführung wird in der Reihenfolge der statischen Blöcke ausgeführt.
Das obige ist eine umfassende Analyse der statischen Schlüsselwörter in Java, die Ihnen vom Herausgeber vorgestellt wurden. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird Ihnen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!