Préface
Nous connaissons très bien les principales fonctions de Java. Je crois que tous ceux qui ont appris la langue java peuvent habilement écrire la fonction d'entrée de ce programme. Cependant, pour savoir pourquoi les fonctions principales sont écrites de cette manière, que signifie chaque mot clé? Peut-être que tout le monde ne peut pas facilement y répondre. J'ai également rencontré ce problème au cours de mes études. En recherchant des informations en ligne et en ajoutant ma propre pratique, j'ai finalement eu une certaine expérience. Je n'ose pas le garder et je l'ai écrit pour le partager avec tout le monde.
Méthode main () en java
La machine virtuelle Java trouve le programme en cours d'exécution qui doit être démarré via la méthode principale et vérifie si la classe où la fonction principale est située est chargée par la machine virtuelle Java. S'il n'est pas chargé, chargez la classe et chargez toutes les autres classes liées. Par conséquent, lorsque le programme est en cours d'exécution, la première méthode à exécuter est main() . Normalement, si vous souhaitez exécuter une méthode de classe, vous devez d'abord instancier un objet de cette classe, puis passer " Nom de l'objet. Nom de la méthode () ", mais parce que le principal est le point d'entrée du programme, l'objet n'a pas été instancié pour le moment, la méthode principale est déclarée statique, de sorte que cette méthode peut être appelée directement via le" nom de classe. Nom de la méthode () ".
Avant de regarder la méthode Main () en Java, regardons d'abord l'application Java la plus simple Helloworld. J'utiliserai cet exemple pour illustrer le mystère de main() dans la classe Java. Le code du programme est le suivant:
/ ** * Explication détaillée de la méthode main () dans Java * / classe publique Helloworld {public static void main (String args []) {System.out.println ("Hello World!"); }}1. Parlons d'abord de la catégorie:
Il existe main() dans la classe Helloworld, ce qui signifie qu'il s'agit d'une application Java qui démarre et passe directement via le JVM.
Puisqu'il s'agit d'une classe, Java permet aux classes de ne pas être soumises aux contraintes de mots clés publics. Bien sûr, la définition de la classe ne peut être limitée qu'aux mots clés publics ou illimités (par défaut).
2. Parlons de la méthode principale ()
La méthode main() est déclarée: public static void main(String args[]) . Il doit être défini comme celui-ci, il s'agit de la spécification Java.
Pourquoi est-ce défini comme ça? Cela a quelque chose à voir avec le fonctionnement du JVM.
Lorsqu'il y a main() dans une classe, l'exécution de la commande "Java Class Name" démarrera la machine virtuelle pour exécuter la méthode principale de la classe.
Étant donné que le JVM appelle d'abord la méthode principale lors de l'exécution de cette application Java. Lors de l'appel, l'objet de cette classe n'est pas instancié, mais est appelé directement via le nom de la classe, il doit donc être limité au public statique.
Pour la méthode principale de Java, JVM a des restrictions et ne peut pas avoir de valeur de retour, donc le type de valeur de retour est vide.
Il existe également un paramètre d'entrée dans la méthode principale, qui est Type String [], qui est également la spécification Java. main() doit avoir un paramètre d'entrée et les détails de la classe doivent être String[] . Quant au nom du tableau des chaînes, cela peut être défini par vous-même. Selon les habitudes, le nom de ce tableau de chaînes est généralement cohérent avec le nom du paramètre Mian dans l'exemple de spécification Sun Java, et est nommé Args.
Par conséquent, main() doit être: " public static void main(String 字符串数组参数名[]) ".
3. La méthode principale () peut lancer une exception
Par conséquent, une exception peut être jetée dans main() , et une exception peut également être déclarée sur main() .
Par exemple, ce qui suit est correct:
classe publique TestMain {public static void main (String [] args) lève une exception {System.out.println ("hahahahahahaha"); lancer une nouvelle exception (""); }}Résultat en cours: exception hahahahaha dans le fil "Main" java.lang.exception: sur maintewest.testmain.main (testmain.java:11) sur sun.reflect.nativemethodaccessorimp.invoke0 (méthode native) à Sun.reflect.NativeMetorAccessorimpl.invoke (nativomethodaccessorimp.javap Sun.Reflect.delegatingMethodAccessOrimpl.invoke (délégation deMethodAccessorimp.java:25) sur java.lang.reflect.method.invoke (méthode.java:585) à com.intellij.rt.execution.application avec un code extérieur.
4. La fonction du tableau des paramètres de chaîne dans la méthode main ()
Dans main() , le tableau des paramètres de chaîne fonctionne pour recevoir des paramètres d'entrée de ligne de commande et les paramètres de la ligne de commande sont séparés par des espaces.
Voici un exemple pour voir comment initialiser et utiliser ce tableau.
/ *** Imprimer les paramètres d'entrée dans la méthode principale * / classe publique TestMain {public static void main (String args []) {System.out.println ("Imprimer les paramètres d'entrée dans la méthode principale!"); for (int i = 0; i <args.length; i ++) {System.out.println (args [i]); }}} Méthode d'exécution et résultats de l'opération
D: / Study / BaseTest / Src> Javac TestMain.java D: / Study / Basetest / SRC> Java TestMain 1 2 3 Imprimez les paramètres d'entrée dans la méthode principale! 1 2 3
5. Donnez une autre version de Helloworld
/ ** * La version pervertie de Helloworld.hehe * / classe publique Helloworld2 {static {System.out.println ("Hello Wordld!"); } public static void main (String args []) {System.exit (0); }} La méthode main() exécute le contenu de la phrase " System.exit(0); ", dans le but de faire fin le programme normalement. Où fait "Helloworld!" imprimer de? Le secret est imprimé en statique, car le contenu du bloc de code statique sera appelé avant l'appel principal.
Vi. Exemple
La machine virtuelle commence par appeler la méthode principale d'une classe spécifiée, en la transmettant à un paramètre de tableau de chaîne, de sorte que la classe spécifiée est chargée, reliant d'autres types utilisés par la classe et les initialisant. Par exemple, pour le programme:
classe publique HelloApp {public static void main (String [] args) {System.out.println ("Hello World!"); for (int i = 0; i <args.length; i ++) {System.out.println (args); }}}Après la compilation, tapez en mode ligne de commande: Java HelloApp Exécuter la machine virtuelle
La machine virtuelle Java sera lancée en appelant la méthode principale de HelloApp et transmise pour maintenir un tableau contenant trois chaînes "Run", "Virtual" et "Machine". Maintenant, nous décrivons brièvement les étapes que les machines virtuelles peuvent prendre lors de l'exécution de HelloApp.
J'ai commencé à essayer d'exécuter la méthode principale de la classe HelloApp et j'ai constaté que la classe n'était pas chargée, ce qui signifie que la machine virtuelle ne contient pas actuellement le représentant binaire de la classe. La machine virtuelle a donc utilisé Classloader pour essayer de trouver un tel représentant binaire. Si ce processus échoue, une exception est lancée. Une fois le cours chargé, avant que la méthode principale ne soit appelée, la classe HelloApp doit être liée à d'autres types et initialisée. Le lien se compose de trois étapes: inspection, préparation et analyse. Vérifiez les symboles et la sémantique de la classe principale chargée, préparez-vous à créer des domaines statiques de la classe ou de l'interface et initialisez ces domaines à des valeurs par défaut standard, et l'analyse est responsable de la vérification des références symboliques de la classe principale vers d'autres classes ou interfaces. Il est facultatif à cette étape. L'initialisation de la classe est l'exécution de la fonction d'initialisation statique et le constructeur d'initialisation du domaine statique déclaré dans la classe. La classe parent d'une classe doit être initialisée avant d'être initialisée.
L'ensemble du processus est le suivant:
Résumer
En tant que spécification spéciale, la méthode principale est très différente des méthodes ordinaires et a de nombreuses limites. Comprendre ses principes nécessite l'apprentissage des connaissances liées aux JVM. C'est un obstacle majeur à l'apprentissage en Java. Ce qui précède est le résumé du principe et l'utilisation du principal compilé par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, vous pouvez laisser un message pour communiquer.