Ich bin ein bisschen neu in diesem Bereich, also nimm es mit. Ich lerne gerade C # und Java und eine ihrer Ähnlichkeiten ist, dass die Hauptfunktion in einer Klasse gekapselt werden muss. Zum Beispiel
public class HelloWorld {
public static void main(String[] args) {
// Some Code
}
}
Jetzt verstehe ich, dass main oft der "Einstiegspunkt" ist, wenn Sie das Programm ausführen. Im Grunde genommen wird Ihr Programm überall dort ausgeführt, wo sich die Hauptfunktion befindet. Aber ich glaube, dass Sie in beiden Sprachen mehrere Hauptfunktionen in mehreren Klassen haben können. Wo ist also der "Einstiegspunkt", wenn ich ein Projekt mit mehreren Hauptfunktionen kompiliere? Woher weiß der Compiler, wo er anfangen soll?
Antworten:
In .NET können Sie definieren, welche Klasse die Main-Methode enthält, die Sie beim Kompilieren verwenden möchten.
http://msdn.microsoft.com/en-us/library/x3eht538.aspx
Wenn Sie in Java ein Jar bündeln, können Sie Ihren Einstiegspunkt im Manifest des Jars definieren.
http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
quelle
In Java bestimmt der Computer den "Einstiegspunkt", wenn Sie das Programm tatsächlich ausführen, nicht, wenn Sie kompilieren. Zum Beispiel über die Befehlszeile
java MyClass
sucht nach
main()
inMyClass
. Alle anderenmain()
Funktionen werden ignoriert.Wenn Sie eine IDE verwenden, können Sie festlegen, welche Klasse die
main()
Funktion enthält, die Sie verwenden möchten.quelle
public static void main(String[] args)
.public static void main(String[])
oderpublic static void main(String ...)
werden sehr präzise.In C # können Sie mehrere
Main
Methoden verwenden.Wenn es mehrere
Main
Methoden gibt, weiß der Compiler nicht, welchen Einstiegspunkt er verwenden soll, und zeigt daher einen Fehler an.Sie müssen die
Main
Methode angeben , die beim Kompilieren verwendet werden soll: Sie können angeben, welche Methode als Compileroption in der Visual Studio-Entwicklungsumgebung oder über den csc-Compiler verwendet werden soll.quelle
Die Hauptklasse ist aus nur einem Grund eine spezielle Klasse: Wenn Sie die Java Virtual Machine ausführen, wird diese Funktion von der JVM aufgerufen. Es ist im Wesentlichen wie jede andere Funktion, und tatsächlich können Sie die Hauptfunktion einer Klasse von einer anderen Klasse aus aufrufen.
Wenn Sie ein Projekt mit mehreren Klassen kompilieren, weisen Sie die JVM an, die Klasse mit der Hauptklasse auszuführen, die Sie verwenden möchten.
und es wird die Hauptmethode von SomeClass ausgeführt, vorausgesetzt, dass SomeClass kompiliert ist und sich die entsprechende kompilierte Datei in Ihrem Klassenpfad befindet. (Das ist etwas, das Sie mit Ihrem speziellen Betriebssystem ausarbeiten müssen, aber ich denke, es ist ziemlich üblich, dass die Option -cp einen Klassenpfad angibt). Also das:
führt die Hauptfunktion von SomeClass im Verzeichnis / home / MyName aus
quelle
In C # geben Sie den Einstiegspunkt mit der
/main:
Compileroption an.Betrachten Sie den folgenden Code mit zwei
main()
Funktionen:namespace Application { class ClassOne { static void main () { // Code here } } class ClassTwo { static void main () { // Code here } } }
Um
ClassOne.main()
als Einstiegspunkt zu verwenden, würden Sie beim Kompilieren Folgendes angeben:csc /main:Application.ClassOne hello.cs
quelle
Wie andere betonten, definieren Sie in Java die Klasse, die Ihre Hauptfunktion enthält, wenn Sie den
java
Befehl ausführen .Sie können aber auch eine ausführbare JAR-Datei erstellen, mit der ausgeführt werden kann
java -jar my.jar
. In diesem Fall benötigen Sie eine Manifestdatei, dieMANIFEST.MF
im OrdnerMETA-INF
im JAR aufgerufen wird . In dieser Datei geben Sie die Klasse mit der Hauptfunktion mit der folgenden Anweisung an :Main-Class: YourClass
.quelle
Für mehrere Hauptfunktionen kann der Einstiegspunkt deklariert werden durch:
So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest
Öffnen Sie die Seite Eigenschaften des Projekts.
Klicken Sie auf die Eigenschaftenseite Anwendung.
Ändern Sie die Startobjekteigenschaft.
Referenz: http://msdn.microsoft.com/en-us/library/x3eht538.aspx
quelle
Die Hauptmethode ist statisch, dh sie gehört eher zur Klasse als zum Objekt. Das Objekt enthält also überhaupt keine andere Hauptmethode. Es wird keine zusätzliche Hauptmethode geben, da main statisch ist. Es ist also einmal pro Klasse.
Wenn Ihr Projekt mehrere Hauptmethoden enthält, geben Sie an, welche beim Starten Ihrer Anwendung gestartet werden soll
quelle
public static void main()
und habenpublic static void main(String[])
. In Java sucht die Laufzeitumgebung nach der letzteren Signatur, die ausgeführt werden soll.In der Binärdatei, z. B. im PE-Format unter Windows und im ELF-Format unter Linux oder einem anderen System, gibt der Header der Binärdatei an, wo sich die Startadresse befindet und es kann nur eine geben.
Welches sollte der Einstiegspunkt sein? Das hängt vom Linker ab. Genau wie @SetFreeByTruth sagte, dass Sie es mit Befehlszeilenparametern angeben können. Viele Linker unterstützen die Angabe des Einstiegspunkts mit Befehlszeilenparametern. Zum Beispiel kann gnus gld den Einstiegspunkt mit dem Parameter -e angeben.
Ich kenne das Verhalten von Java nicht, da es von einer virtuellen Java-Maschine geladen wird.
quelle
In Visual Studio wählen Sie das Projekt aus, für das Sie der Einstiegspunkt sein möchten, klicken Sie mit der rechten Maustaste und legen Sie es als Startprojekt fest.
quelle