De Multiples Fonctions Principales
Je suis un peu nouveau de cette sorte de garder avec moi. Je suis présentement en train d'apprendre le C# et le Java et l'un de leurs similitudes, c'est que la fonction principale doit être encapsulée dans une classe. Par exemple
public class HelloWorld {
public static void main(String[] args) {
//Some Code
}
}
Maintenant, je comprends ce qui est souvent le "point d'entrée" lorsque vous exécutez le programme. Donc, fondamentalement, votre programme va commencer à exécuter partout où la fonction principale est. Mais je crois que dans les deux langues, vous pouvez avoir de multiples fonctions principales au sein de plusieurs classes. Alors, quand je compile un projet avec de multiples fonctions principales, où est le "point d'entrée"? Comment le compilateur de savoir par où commencer?
- La réponse est différente pour chaque langue.
Vous devez vous connecter pour publier un commentaire.
Dans .NET, vous pouvez définir la classe qui contient la méthode main que vous souhaitez utiliser lorsque vous êtes à la compilation.
http://msdn.microsoft.com/en-us/library/x3eht538.aspx
En Java, si vous êtes le regroupement pour un pot, vous pouvez définir votre point d'entrée dans le pot manifeste.
http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
En Java, l'ordinateur détermine le "point d'entrée" lorsque vous exécutez le programme, et non pas lors de la compilation. Par exemple, à partir de la ligne de commande
recherches pour
main()
dansMyClass
. Tous les autresmain()
fonctions sont ignorés.Si vous utilisez un IDE, puis vous pouvez définir la classe qui contient la
main()
de la fonction que vous souhaitez utiliser.public static void main(String[] args)
.public static void main(String[])
oupublic static void main(String ...)
à très précis.En C#, vous pouvez utiliser plusieurs
Main
méthodes.S'il y a plusieurs
Main
méthodes, le compilateur ne sait pas quel point d'entrée à l'utilisation, et donc il va vous montrer une erreur.Vous besoin de spécifiez l'option
Principal
méthode à être utilisé lors de la compilation:Vous pouvez spécifier la méthode à être utilisé comme une option de compilation dans l'environnement de développement Visual Studio ou par le csc compilateur.
La classe principale est une classe spéciale pour une seule raison: lorsque vous exécutez une Machine Virtuelle Java, cette fonction est ce que la JVM des appels. C'est comme n'importe quelle autre fonction, et, en fait, vous pouvez appeler une classe principale fonction d'une autre classe.
Lorsque vous compilez un projet avec plusieurs classes, vous dites à la JVM pour exécuter la classe avec la classe principale que vous souhaitez utiliser, comme suit:
et il va exécuter la méthode main de SomeClass, en supposant que SomeClass est compilé et que le fichier compilé est dans votre classpath. (C'est quelque chose que vous aurez à travailler avec votre OS, mais je pense que c'est assez habituel pour les cp option pour spécifier un chemin de classe). Donc:
va exécuter la fonction principale de SomeClass dans le répertoire /home/MyName
En C#, vous pouvez spécifier le point d'entrée à l'aide de la
/main:
option du compilateur.Considérons le code suivant contenant deux
main()
fonctions:À utiliser
ClassOne.main()
que votre point d'entrée, vous devez spécifier les éléments suivants lors de la compilation:En Java, comme d'autres l'ont souligné, vous définissez la classe contenant votre fonction principale lorsque vous exécutez le
java
de commande.Mais vous pouvez aussi construire un exécutable jar, qui peut être exécuté avec
java -jar my.jar
. Dans ce cas, vous avez besoin d'un fichier de manifeste appeléMANIFEST.MF
dans le dossierMETA-INF
dans le pot. Dans ce fichier, vous devez spécifier la classe contenant la fonction principale de l'aide de l'instruction:Main-Class: YourClass
.Pour de multiples fonctions principales de point d'entrée peut être déclaré par :
Pour définir cette option du compilateur dans l'environnement de développement Visual Studio
Ouvrir les Propriétés du projet page.
Cliquez sur l'Application de la propriété page.
Modifier le Démarrage de l'objet de la propriété.
référence : http://msdn.microsoft.com/en-us/library/x3eht538.aspx
La principale méthode est statique, ce qui signifie qu'il appartient à la classe plutôt que de l'objet. Si l'objet n'aurons pas d'autre méthode main à l'intérieur du tout. Il n'aura pas un supplément de main-méthode, en tant que principal est statique. Donc, c'est une fois par classe.
Si vous disposez de plusieurs méthodes dans votre projet, vous devrez spécifier un pour lancer lors du démarrage de votre application
public static void main()
etpublic static void main(String[])
. En Java, l'environnement d'exécution va chercher la dernière signature à exécuter.En fait, dans le fichier binaire, par exemple, le format de PE de windows et le format ELF dans Linux ou tout autre système, L'en-tête de fichier binaire va indiquer où est l'adresse de début et il ne peut y avoir qu'un seul.
Qui devrait être le point d'entrée? Cela dépend de l'éditeur de liens. Tout comme @SetFreeByTruth dit que vous pouvez le spécifier avec des paramètres de ligne de commande.
De nombreux linkers en charge la spécification point d'entrée avec les paramètres de ligne de commande. par exemple, gnu gld pouvez spécifier le point d'entrée avec le paramètre -e.
Je ne connais pas le comportement de Java, car il est chargé par la machine virtuelle Java.
Dans Visual Studio, vous sélectionnez le projet que vous voulez être le point d'entrée, à droite et cliquez sur Définir comme Projet de Démarrage.