多重主要function

我有点新,所以忍受着我。 我目前正在学习C#和Java,其中的一个相似之处在于主函数需要封装在一个类中。 例如

public class HelloWorld { public static void main(String[] args) { // Some Code } } 

现在我明白了,当你运行程序的时候main是经常的“入口点”。 所以基本上,你的程序将在主函数的任何地方开始执行。 但我相信在这两种语言中,你可以在多个类中有多个主要的function。 所以当我编译一个具有多个主要function的项目时,“入口点”在哪里? 编译器如何知道从哪里开始?

在.NET中,您可以定义哪个类包含您要在编译时使用的Main方法。

http://msdn.microsoft.com/en-us/library/x3eht538.aspx

在Java中,如果你捆绑到一个jar,你可以在jar的清单中定义你的入口点。

http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html

在Java中,计算机确定实际执行程序时的“入口点”,而不是在编译时。 例如,从命令行

 java MyClass 

MyClasssearchmain() 。 所有其他main()函数都被忽略。

如果您正在使用IDE,则可以设置哪个类包含要使用的main()函数。

在C#中,可以使用多个Main方法。

如果有多个Main方法,编译器不知道使用哪个入口点,因此会显示错误。

需要指定要在编译时使用的Main方法 :您可以指定在Visual Studio开发环境中或通过csc编译器将哪些方法用作编译器选项。

主类是一个特殊的类,只有一个原因:运行Java虚拟机时,该函数就是JVM所调用的。 它基本上和其他函数一样,实际上你可以从另一个类调用一个类的主函数。

当你用多个类来编译一个项目时,你告诉JVM使用你想要使用的主类来运行这个类,如下所示:

 java SomeClass 

它会运行SomeClass的主要方法,假定SomeClass被编译,并且相应的编译文件在你的类path中。 (这是你必须解决你的特定操作系统,但我认为这是相当平常的-cp选项指定一个类path)。 所以这:

 java -cp /home/MyName Someclass 

将在目录/ home / MyName中运行SomeClass的主要function

在C#中,使用/main:编译器选项指定入口点。

考虑下面的代码,它包含两个main()函数:

 namespace Application { class ClassOne { static void main () { // Code here } } class ClassTwo { static void main () { // Code here } } } 

要使用ClassOne.main()作为入口点,编译时将指定以下内容:

 csc /main:Application.ClassOne hello.cs 

正如其他人指出的那样,在Java中,当您运行java命令时,定义包含main函数的类。

但是你也可以build立一个可执行的jar文件,它可以使用java -jar my.jar运行。 在这种情况下,需要在jar文件夹中的META-INF文件夹中有一个名为MANIFEST.MF的清单文件。 在这个文件中,用下面的语句指定包含main函数Main-Class: YourClass

对于多个主函数,入口点可以通过以下方式声明:

在Visual Studio开发环境中设置此编译器选项

打开项目的“属性”页面。

点击应用程序属性页面。

修改启动对象属性。

参考: http : //msdn.microsoft.com/en-us/library/x3eht538.aspx

主要方法是静态的,这意味着它属于类而不是对象。 所以这个对象根本就没有其他的主要方法。 它不会有一个额外的主要方法,因为主要是静态的。 所以每class有一次

如果您的项目中有多个主要方法,您将指定在启动应用程序时要启动哪一个

实际上,在二进制文件中,例如windows中的PE格式和Linux或任何其他系统中的ELF格式,二进制文件的头部将指定起始地址的起始位置,只能有一个。

哪一个应该是入口点? 这取决于链接器。 就像@SetFreeByTruth说的那样,你可以用命令行参数来指定它。 许多连接器支持用命令行参数指定入口点。 例如,gnu的gld可以用参数-e指定入口点。

我不知道Java的行为,因为它是由Java虚拟机加载的。

在Visual Studio中,select要作为入口点的项目,右键单击并设置为“启动项目”。