我对此有点新意,请耐心等待。我目前正在学习C#和Java,它们的一个相似之处在于主要功能需要封装在一个类中。例如
public class HelloWorld {
public static void main(String[] args) {
// Some Code
}
}
现在我明白,当你运行程序时,main通常是“入口点”。所以基本上,你的程序将在主函数的任何地方开始执行。但我相信在两种语言中,您可以在多个类中拥有多个主要功能。因此,当我编译一个具有多个主要功能的项目时,“入口点”在哪里?编译器如何知道从哪里开始?
答案 0 :(得分:58)
在Java中,计算机确定实际执行程序时的“入口点”,而不是编译时。例如,从命令行
java MyClass
在main()
中搜索MyClass
。所有其他main()
函数都将被忽略。
如果您使用的是IDE,则可以设置哪个类包含您要使用的main()
函数。
答案 1 :(得分:55)
在.NET中,您可以定义哪个类包含要在编译时使用的Main方法。
http://msdn.microsoft.com/en-us/library/x3eht538.aspx
在Java中,如果你要捆绑到jar,你可以在jar的清单中定义你的入口点。
http://docs.oracle.com/javase/tutorial/deployment/jar/appman.html
答案 2 :(得分:16)
在C#中,您可以使用多种Main
方法。
如果有多个Main
方法,编译器不知道要使用哪个入口点,因此它会显示错误。
您需要在编译时使用specify the Main
method:
您可以在Visual Studio开发环境中或通过csc编译器指定要用作编译器选项的方法。
答案 3 :(得分:12)
主类是一个特殊类,原因只有一个:运行Java虚拟机时,该函数就是JVM调用的函数。它基本上与任何其他函数一样,实际上您可以从另一个类调用一个类的主函数。
当您编译具有多个类的项目时,您告诉JVM使用您要使用的主类来运行该类,如下所示:
java SomeClass
它将运行SomeClass的main方法,假设SomeClass已编译,并且相应的编译文件位于类路径中。 (这是你必须与你的特定操作系统一起工作的东西,但我认为-cp选项通常指定一个类路径)。所以这个:
java -cp /home/MyName Someclass
将在目录/ home / MyName
中运行SomeClass的main函数答案 4 :(得分:9)
在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
答案 5 :(得分:7)
在Java中,正如其他人指出的那样,在运行java
命令时定义包含main函数的类。
但您也可以构建一个可执行jar,可以使用java -jar my.jar
运行。在这种情况下,您需要jar中文件夹MANIFEST.MF
中名为META-INF
的清单文件。在此文件中,使用以下语句指定包含main函数的类:Main-Class: YourClass
。
答案 6 :(得分:7)
对于多个主要功能,入口点可以通过以下方式声明:
在Visual Studio开发环境中设置此编译器选项
打开项目的“属性”页面。
单击“应用程序”属性页。
修改启动对象属性。
答案 7 :(得分:4)
main方法是static,这意味着它属于类而不是对象。所以对象根本就没有其他主要方法。它不会有额外的main方法,因为main是静态的。所以每节课一次。
如果项目中有多个主要方法,您将指定在启动应用程序时启动哪个主要方法
答案 8 :(得分:2)
实际上,在二进制文件中,例如,Windows中的PE格式和Linux或任何其他系统中的ELF格式,二进制文件的标题将指定起始地址的位置,并且只能有一个。
哪一个应该是切入点?这取决于链接器。就像@SetFreeByTruth所说,你可以用命令行参数指定它。 许多链接器支持使用命令行参数指定入口点。例如,gnu的gld可以使用参数-e。
指定入口点我不知道Java的行为,因为它是由Java虚拟机加载的。
答案 9 :(得分:-1)
在Visual Studio中,选择要作为入口点的项目,右键单击并设置为“启动项目”。