Java question de Débutant sur String[] args dans la méthode main
Alors j'ai essayé à l'exclusion de String[]
args à partir de la main
méthode
Il compilé bien !
Mais JVM est montrant une exception
Pourquoi avait-il compiler lorsque String[]
args doit être inclus à chaque fois ?
Ce qui se passe ici ? Pourquoi ne pas montrer une erreur de compilation ?
tapant cela m'a fait penser que peut-être compilateur ne la voient pas comme LE main
méthode ..est-ce vrai ?
Si c'est le cas..pourquoi pas ? Je veux dire n'est-il pas censé être juste une méthode main qui DOIT avoir String[]
args comme argument ?
Remarque: vous pouvez également déclarer comme:
Je l'ai eu..merci à tous..ne l'ai pas lu à propos de la surcharge encore, mais j'ai maintenant une petite idée..juste essayé de lancer le programme avec deux conduites..ça fonctionne
"Mais JVM est montrant une exception": ce que l'exception
public static void main( String ... args )
Je l'ai eu..merci à tous..ne l'ai pas lu à propos de la surcharge encore, mais j'ai maintenant une petite idée..juste essayé de lancer le programme avec deux conduites..ça fonctionne
"Mais JVM est montrant une exception": ce que l'exception
OriginalL'auteur Serenity | 2010-05-21
Vous devez vous connecter pour publier un commentaire.
Correcte. Il n'y a pas d'erreur de compilation car vous êtes parfaitement libre d'avoir toutes sortes de méthodes nommées
main
. Mais quand vous commencez à la JVM et de lui donner une "classe principale", puis il va chercher une méthodestatic public void main(String[])
dans cette classe, et s'il ne trouve pas une telle méthode, il s'interrompt avec une exception.Cela permet de disposer de plusieurs méthodes principales dans votre programme et il est vraiment la seule chose qui a de sens que si vous pensez à ce sujet: les Demandes peuvent être composées à partir de classes et les fichiers JAR à partir de nombreuses sources différentes, écrits par des personnes différentes à des moments différents, de sorte que dans de nombreux cas, vous ne pouvez pas vraiment avoir un unique, désigné "classe principale" dès le début.
OriginalL'auteur Michael Borgwardt
La JVM est à la recherche pour un de très spécial principale méthode à exécuter. Seule la signature
est trouvé. Toutes les autres méthodes avec le nom
main
sont juste "normal".Parce que vous n'avez pas à avoir un
main
méthode. Vous êtes libre de définir une que la JVM ne faut pas se prendre pour exécuter le programme.Parce que vous êtes autorisé plusieurs instances de méthodes avec le même nom mais avec des paramètres différents - il est appelé "surcharge".
OriginalL'auteur tangens
Pas chaque classe doit avoir un
public static void main(String[] args)
méthode, seulement celui que vous souhaitez exécuter à partir de la JVM. Le résultat est que votre classe de compiler sans erreur si il trouvepublic static void main()
mais lève une exception si vous essayez de l'exécuter avec la JVM car il ne peut pas trouver le point d'entrée du programme.Bas de ligne et le point d'entrée de votre programme doit être
public static void main(String[] args)
qui doit être situé à au moins une de vos .les fichiers java.Remarque vous pouvez avoir plusieurs
public static void main(String[] args)
méthodes dans votre code (un par classe) l'avantage est que vous pouvez les utiliser pour tester et déboguer vos classes individuellement.OriginalL'auteur Covar
Pour tenter de répondre à "pourquoi est-il légal de compiler sans une bonne méthode main" c'est parce que pas chaque projet java est une application autonome qui peut être exécuté. Certains sont juste des bibliothèques, là où d'autres programmes de les inclure dans les fichiers jar et utiliser leur code, mais ils ne sont pas "exécuter" eux-mêmes. D'autres peuvent être des applications web, où ils sont déployés sur un serveur web qui a déjà été commencé, seul le serveur lui-même a fait un bon "principal" de la méthode. Le projet d'application web est ouvert et exécuté par elle.
Le compilateur ne savais pas vraiment au moment de la compilation que vous avaient l'intention d'essayer d'exécuter votre code comme un stand le long de l'application.
OriginalL'auteur Affe
Java prend en charge la surcharge de méthode. Cela signifie que vous pouvez avoir plusieurs méthodes avec le même nom, mais différents arguments.
Après avoir dit que, lorsque vous exécutez
java ClassName
, Java regarde dansClassName.class
pour une méthode avec la signaturepublic static void main (String[])
(il ne se soucie pas de ce que leString[]
variable est nommé), et l'exécute. Si ce n'est pas en trouver un, Java bombe avec l'exception suivante:OriginalL'auteur Powerlord
Vous sont corrects. Le moteur d'exécution est à la recherche d'une méthode main qui prend un tableau de chaîne comme paramètre, et n'est pas à la trouver.
Le fait que vous avez une méthode main qui ne tient pas un tableau de chaîne est hors de propos. comme toute autre méthode, vous pouvez créer plusieurs versions de
main()
qui prennent différents paramètres - le runtime il suffit de les ignorer.OriginalL'auteur Eric Petroelje
N'est pas qu'une surcharge? C'est tout à fait légal de définir une méthode
C'est juste pas le point d'entrée de la JVM à la recherche de.
La surcharge est la possibilité d'avoir plusieurs méthodes avec le même nom mais différents arguments. Le compilateur réalise en fait un nom basé sur le nom de la méthode et les arguments.
Donc une main(String[]) serait appelé, pour le compilateur, quelque chose comme main_String_arr, et main() serait appelé quelque chose comme principal.
OriginalL'auteur extraneon
Vous pouvez avoir de nombreuses méthodes nommé principal, mais un seul peut être LE principal point d'entrée du programme. C'est l'un avec String[] args.
OriginalL'auteur Anton
C'est encore une méthode valable. Par exemple, vous pourriez avoir une méthode statique nommée "main" avec un int en paramètre si vous voulais:
Le compilateur ne se plaint pas parce que c'est une méthode valable! C'est juste que, pour exécuter un programme Java, Java recherche d'une méthode statique nommée "main" avec une Chaîne unique argument de tableau.
OriginalL'auteur Michael
Oui..
Le compilateur Java va chercher la même signature de la méthode à la considérer comme une
main
Écrire une fonction qui a le même nom, mais d'autres paramètres de entraînera une surcharge de fonctions.
Fonctions surchargées ne sont pas les mêmes..!!
Le cas en C# est un peu différent..
Enfin, vous devez vous assurer que votre main est comme ça:
OriginalL'auteur Betamoo
Vous pouvez utiliser le compilateur pour compiler partie d'une application: par exemple pour faire un fichier jar qui vous appelez de l'autre partie de l'application ou une applet qui est commencé d'une manière différente. Donc le compilateur ne peut pas se plaindre du manque de main(String[]) de la méthode. Mais en essayant de courir les résultats de cette compilation.
Lorsque vous essayez d'exécuter les résultats d'une telle compilation java est toujours à la recherche pour une main(String[]); si elle ne peut pas le trouver, il va lancer une exception d'exécution. Le principal utilisé pour démarrer une application doit avoir exactement que la signature.
OriginalL'auteur DJClayworth
Voici une citation de Java Tutoriels/Prise En Main:
Donc, pour être précis, la
main
méthode est définie par Java comme une application de point d'entrée. Tout n'est pas une application, et non pas chaquemain
méthode est une méthode d'application point d'entrée. Les Applets, par exemple, n'ont pas besoin d'unmain
, parce que c'est commencé avec un mécanisme différent.Note également que, depuis l'introduction de varargs, vous pouvez déclarer votre application point d'entrée comme suit:
Cela fonctionne car en dessous du sucre syntaxique, varargs en Java est mis en œuvre sous la forme de tableaux.
Voir aussi
Questions connexes
principal
la méthodestatique
?principal
de la méthode?main()
en java,void
?main()
?main()
,init()
, ourun()
?OriginalL'auteur polygenelubricants
Points importants:
Suivante est la signature de la méthode principale:
principale méthode peut être surchargée.
Plusieurs classes peuvent contenir la principale méthode à l'intérieur d'une seule unité de compilation (et donc tous d'entre eux seront appelés exécutable classes)
La classe contenant la méthode main peut ou ne peut pas être public.
Par erreur, si vous omettez le mot-clé static (ou la signature diffère en aucune façon), compilation serait fait, mais une erreur d'exécution se produit.
À partir de mon blog:
Java: les points Importants à propos de la méthode main
OriginalL'auteur Utsav