为什么Java程序需要一个;main();方法?

为什么Java程序需要一个;main();方法?,java,entry-point,Java,Entry Point,这只是一个命名约定?为什么在从shell执行程序时不能调用任何方法 $> java myPackage.MyClass.myOwnEntryPoint(String[] str) $>java myPackage.MyClass.myOwnEntryPoint(字符串[]str) 是的,这是一种命名约定,继承自C。其优点是,通过这种方式,只需查看代码就可以非常简单地找出哪个方法应该是主方法。主方法是运行java应用程序的java程序的入口点(与小程序或其他东西相反)寻找。就我所知,没有办法告诉j

这只是一个命名约定?为什么在从shell执行程序时不能调用任何方法

$> java myPackage.MyClass.myOwnEntryPoint(String[] str) $>java myPackage.MyClass.myOwnEntryPoint(字符串[]str)
是的,这是一种命名约定,继承自C。其优点是,通过这种方式,只需查看代码就可以非常简单地找出哪个方法应该是主方法。主方法是运行java应用程序的
java
程序的入口点(与小程序或其他东西相反)寻找。就我所知,没有办法告诉
java
去寻找不同的方法,所以这不仅仅是一种命名约定;如果希望应用程序运行(无论如何,通过标准的
java
工具),则需要为其提供一个带有适当签名的
main
方法。(您可以使用静态初始值设定项玩游戏,但这完全是另一回事。)


名称
main
是从C继承的,但它不仅仅是一个约定。

不只是一个约定,是吗?我的意思是,当你运行这个程序时(通过
java
),它就是在寻找这个东西…@T.J.克劳德:是的,这是真的。但是您可以编写自己的程序启动器,它加载一个类并运行方法
myPersonalMain()
。这就是为什么它“只是一种约定”——尽管这是许多工具(不仅仅是
java
)使用的一种重要约定。@T.J:嗯,有不同类型的代码转换。打破某些规则只会激怒其他程序员,而必须遵循其他规则才能使代码正常工作。后者的另一个例子是setter和getter的命名转换。对我来说,如果它被硬编码到一个绝对核心的工具中,比如
java
,那不是一个惯例,而是一个要求。:-)但是@sleske有一个很好的观点:您可以使用不同的名称编写自己的程序启动器。