Vorwort
Wir sind mit den Hauptfunktionen in Java sehr vertraut. Ich glaube, dass jeder, der die Java -Sprache gelernt hat, die Eintrittsfunktion dieses Programms geschickt schreiben kann. Was bedeutet jedes Schlüsselwort jedoch, warum die Hauptfunktionen auf diese Weise geschrieben sind? Vielleicht kann nicht jeder es leicht beantworten. Ich habe dieses Problem auch während meines Studiums gestoßen. Indem ich online nach Informationen suche und meine eigene Praxis hinzufügte, habe ich endlich einige Erfahrungen gesucht. Ich wage es nicht, es zu behalten und schrieb es aus, um es mit allen zu teilen.
Main () Methode in Java
Die virtuelle Java -Maschine findet das laufende Programm, das über die Hauptmethode gestartet werden muss, und prüft, ob die Klasse, in der sich die Hauptfunktion befindet, von der Java Virtual Machine geladen wird. Wenn es nicht geladen ist, laden Sie die Klasse und laden Sie alle verwandten anderen Klassen. Wenn das Programm ausgeführt wird, ist die erste Methode zum Ausführen main() -Methode. Wenn Sie eine Klassenmethode ausführen möchten, müssen Sie zuerst ein Objekt dieser Klasse instanziieren und dann " Objektname. Methodame () übergeben. ", aber weil Main der Einstiegspunkt des Programms ist, wurde das Objekt zu diesem Zeitpunkt nicht instanziiert, die Hauptmethode wird als statisch deklariert, so dass diese Methode direkt über den Klassennamen aufgerufen werden kann. Methodame () ".
Bevor Sie sich die Main () -Methode in Java ansehen, schauen wir uns zunächst die einfachste Java -Anwendung HelloWorld an. Ich werde dieses Beispiel verwenden, um das Geheimnis main() -Methode in der Java -Klasse zu veranschaulichen. Der Code des Programms lautet wie folgt:
/ *** Detaillierte Erläuterung der Main () -Methode in Java*/ public class helloWorld {public static void main (String args []) {System.out.println ("Hallo Welt!"); }}1. Lassen Sie uns zuerst über die Kategorie sprechen:
In der HelloWorld -Klasse gibt es main() -Methode, was bedeutet, dass dies eine Java -Anwendung ist, die direkt durch die JVM beginnt und läuft.
Da es sich um eine Klasse handelt, ermöglicht Java Klassen, nicht öffentlichen Keyword -Einschränkungen zu unterliegen. Natürlich kann die Definition der Klasse nur auf öffentliche oder unbegrenzte Schlüsselwörter beschränkt sein (der Standard).
2. Lassen Sie uns über die Main () -Methode sprechen
Die main() -Methode wird deklariert als: public static void main(String args[]) . Es muss so definiert werden, dies ist die Java -Spezifikation.
Warum ist es so definiert? Es hat etwas mit dem Betrieb des JVM zu tun.
Wenn in einer Klasse main() -Methode vorhanden ist, startet die Ausführung des Befehls "Java -Klasse -Name" die virtuelle Maschine, um die Hauptmethode in der Klasse auszuführen.
Da der JVM beim Ausführen dieser Java -Anwendung zuerst die Hauptmethode aufruft. Beim Anruf wird das Objekt dieser Klasse nicht instanziiert, sondern direkt durch den Klassennamen aufgerufen, sodass es auf öffentliche Statik beschränkt sein muss.
Für die Hauptmethode in Java hat JVM Einschränkungen und kann keinen Rückgabewert haben, sodass der Rückgabewerttyp ungültig ist.
Es gibt auch einen Eingabeparameter in der Hauptmethode, nämlich Typ String [], die auch die Java -Spezifikation ist. main() -Methode muss einen Eintragsparameter haben, und die Klassendetails müssen String[] sein. Der Name des String -Arrays kann von Ihnen selbst festgelegt werden. Gemäß den Gewohnheiten stimmt der Name dieses String -Arrays im Allgemeinen mit dem Namen des mianischen Parameters im Beispiel für die Sun Java -Spezifikation überein und wird als Argumente bezeichnet.
Daher muss main() -Method -Definition: " public static void main(String 字符串数组参数名[]) sein.
3. Die Main () -Methode kann eine Ausnahme auswerfen
Daher kann eine Ausnahme in main() -Methode geworfen werden, und eine Ausnahme kann auch nach main() -Methode deklariert werden.
Zum Beispiel ist Folgendes korrekt:
public class testmain {public static void main (String [] args) löst eine Ausnahme aus {System.out.println ("hahahahahahahaha"); Neue Ausnahme auswerfen (""); }}Running result: hahahahaha Exception in thread "main" java.lang.Exception: at maintainest.TestMain.main(TestMain.java:11) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.delegatingMethodaccessorimpl.invoke (delegatingMethodaccessorimpl.java:25) bei Java.lang.reflect.method.invoke (methody.java:585) bei com.intellij.rt.execution.
4. Die Funktion des String -Parameter -Arrays in der Main () -Methode
In main() -Methode fungiert das String -Parameter -Array -Array, um die Befehlszeileneingabeparameter zu empfangen, und die Parameter der Befehlszeile werden durch Leerzeichen getrennt.
Hier ist ein Beispiel, um zu sehen, wie dieses Array initialisiert und verwendet wird.
/ *** Druckeingabeparameter in der Hauptmethode*/ public class testmain {public static void main (String args []) {System.out.println ("Eingabeparameter in der Hauptmethode drucken!"); für (int i = 0; i <args.length; i ++) {System.out.println (args [i]); }}} Ausführungsmethode und Betriebsergebnisse
D:/study/baSetest/src> javac testmain.java d:/study/baSetest/src> Java testmain 1 2 3 Drucken Sie die Eingabeparameter in der Hauptmethode! 1 2 3
5. Geben Sie eine andere Version von HelloWorld
/ *** Die perverse Version von HelloWorld.heHehe*/ public class helloWorld2 {static {System.out.println ("Hallo Word!"); } public static void main (String args []) {System.exit (0); }} Die main() -Methode führt den Inhalt des Satzes " System.exit(0); " aus, um das Programm normal zu beenden. Wo macht "helloWorld!" Druck von? Das Geheimnis wird statisch gedruckt, da der Inhalt des statischen Codeblocks vor dem Hauptanruf aufgerufen wird.
Vi. Beispiel
Die virtuelle Maschine ruft mit der Methode der Hauptklasse auf, überträgt sie an einen String -Array -Parameter, so dass die angegebene Klasse geladen wird, die von der Klasse verwendeten Typen verknüpft und initialisiert wird. Zum Beispiel für das Programm:
public class HelloApp {public static void main (String [] args) {System.out.println ("Hallo Welt!"); für (int i = 0; i <args.length; i ++) {System.out.println (args); }}}Geben Sie nach der Kompilierung den Befehlszeilenmodus ein: Java HelloApp führen virtuelle Maschine aus
Die Java Virtual Machine wird mit dem Aufrufen von HelloApps Methode Main angerufen und an Main an ein Array übergeben, das drei Zeichenfolgen "Run", "Virtual" und "Machine" enthält. Jetzt beschreiben wir kurz die Schritte, die virtuelle Maschinen bei der Ausführung von HelloApp ausführen können.
Ich begann zu versuchen, die Hauptmethode der HelloApp -Klasse auszuführen, und stellte fest, dass die Klasse nicht geladen wurde, was bedeutet, dass die virtuelle Maschine derzeit nicht den binären Vertreter der Klasse enthält. Die virtuelle Maschine verwendete also Classloader, um zu versuchen, einen so binären Vertreter zu finden. Wenn dieser Vorgang fehlschlägt, wird eine Ausnahme ausgelöst. Nachdem die Klasse geladen wurde, muss die Klasse HelloApp vor dem Aufrufen der Hauptmethode mit anderen Typen verknüpft und initialisiert werden. Die Verbindung besteht aus drei Phasen: Inspektion, Vorbereitung und Parsen. Überprüfen Sie die Symbole und die Semantik der geladenen Hauptklasse, bereiten Sie sich darauf vor, statische Domänen der Klasse oder Schnittstelle zu erstellen und diese Domänen auf Standard -Standardwerte zu initialisieren. Die Parsen ist für die Überprüfung der symbolischen Referenzen der Hauptklasse auf andere Klassen oder Schnittstellen verantwortlich. Bei diesem Schritt ist es optional. Die Klasseninitialisierung ist die Ausführung der statischen Initialisierungsfunktion und des Initialisierungskonstruktors der in der Klasse deklarierten statischen Domäne. Die übergeordnete Klasse einer Klasse muss vor ihrer Initialisierung initialisiert werden.
Der gesamte Prozess ist wie folgt:
Zusammenfassen
Als spezielle Spezifikation unterscheidet sich die Hauptmethode stark von gewöhnlichen Methoden und weist viele Einschränkungen auf. Das Verständnis seiner Prinzipien erfordert das Lernen von JVM-bezogenem Wissen. Es ist ein großes Hindernis für das Lernen in Java. Das obige ist die Zusammenfassung des Prinzips und der Verwendung von vom Herausgeber erstellten Hauptkennzeichnungen. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen.