多个主要功能

时间:2012-07-18 22:39:48

标签: c# java main

我对此有点新意,请耐心等待。我目前正在学习C#和Java,它们的一个相似之处在于主要功能需要封装在一个类中。例如

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

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

10 个答案:

答案 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开发环境中设置此编译器选项

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

单击“应用程序”属性页。

修改启动对象属性。

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

答案 7 :(得分:4)

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

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

答案 8 :(得分:2)

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

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

指定入口点

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

答案 9 :(得分:-1)

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