多个主要功能

Ben*_*Ben 68 c# java program-entry-point

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

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

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

Cod*_*ice 58

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

java MyClass
Run Code Online (Sandbox Code Playgroud)

搜索main()在MyClass.所有其他main()功能都被忽略.

如果您使用的是IDE,则可以设置包含main()要使用的功能的类.

  • @LuiggiMendoza是的,这是正确的.为简洁起见,我遗漏了main()的完整签名,因为OP已经证明他知道它是什么. (7认同)
  • 或者对于方法签名`public static void main(String [])`或`public static void main(String ...)`要非常精确. (5认同)
  • 在Java中,它搜索`public static void main(String [] args)`. (3认同)
  • 其他主要方法不会被"忽略",它们不会自动执行.程序员可以编写显式调用类主方法的代码. (2认同)
  • 哇噢!我的第一枚银徽章!感谢所有投票给这个答案的人! (2认同)

MSt*_*odd 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

  • 我很惊讶这是最受欢迎的答案.至少对于Java来说,Code-Guru和@CosmicComputer的答案似乎对大多数人来说更为相关.我会说很少有开发人员,除了少数运送"可执行"罐子之外,都使用了manifest方法. (9认同)
  • @GeorgeHawkins在我看来,这是回答两种语言问题的唯一答案,尽管对于_Java_而言,它可能不是最好的答案. (3认同)

Ani*_*dha 17

在C#中,您可以使用多种Main方法.

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

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

  • 是的......但是这个答案是参考c#而不是java (2认同)
  • @ Code-Guru:C#的答案是正确的,因为程序集在编译时指定了一个入口点 - 你*不*在执行时指定一个类名,只是程序集名称. (2认同)
  • @JonSkeet 原始答案没有指定语言。感谢您的编辑,阿尼鲁达。 (2认同)

Cos*_*ter 12

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

当您编译具有多个类的项目时,您告诉JVM使用您要使用的主类来运行该类,如下所示:

java SomeClass
Run Code Online (Sandbox Code Playgroud)

它将运行SomeClass的main方法,假设SomeClass已编译,并且相应的编译文件位于类路径中.(这是你必须与你的特定操作系统一起工作的东西,但我认为-cp选项通常指定一个类路径).所以这:

java -cp /home/MyName Someclass
Run Code Online (Sandbox Code Playgroud)

将在目录/ home/MyName中运行SomeClass的main函数


Set*_*uth 9

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

请考虑以下包含两个main()函数的代码:

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

    class ClassTwo {
        static void main () {
            // Code here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要ClassOne.main()用作入口点,您可以在编译时指定以下内容:

csc /main:Application.ClassOne hello.cs
Run Code Online (Sandbox Code Playgroud)


小智 7

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

但是你也可以构建一个可以运行的可执行jar java -jar my.jar.在这种情况下,您需要在jar MANIFEST.MF中的文件夹META-INF中调用清单文件.在此文件中,使用以下语句指定包含main函数的类:Main-Class: YourClass.


NG.*_*NG. 7

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

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

打开项目的"属性"页面.

单击"应用程序"属性页.

修改"启动"对象属性.

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