我知道它看起来很疯狂。但是,无论如何。我们都知道主要方法的方式:
public static void main(String args[])
。原因是
public
:可以从定义它的类之外的代码访问该方法(从JVM调用)static
:可以访问该方法,而无需实例化声明它的类。
同样,此关键字还允许JVM在不实例化类的情况下调用此方法。void
:该方法不会返回任何数据。那么,这里有“主要”的必要性。即使有另一种方法说public static void entry(String args[])
,为什么jvm不会调用这个方法。它给编译器问题说它无法找到主要方法。即使这个public static void entry(String args[])
也符合上述3条规则。
答案 0 :(得分:3)
继续。实现您自己的命令行驱动程序,该驱动程序使用JNI调用接口在您感兴趣的任何入口点启动程序。
'main'的特殊字符纯粹是Java命令行程序的问题。设计师做出了选择。他们的理由并不是很有趣;它不会改变。嗯,确切地说,你可以加入openjdk项目并尝试向他们出售一个功能。
答案 1 :(得分:2)
该方法必须被称为main
,因为需要指定该方法是入口点方法。不只是任何带有public static void
个String[]
参数的class Something {
public static void main(String[] args) { ... }
public static void parseArgs(String[] args) { ... }
public static void displayInvalidArgsMessage(String[] args) { ... }
}
方法都应该被视为一个入口点...你可能想要这样一个做出不同的方法。此外,通过指定方法必须具有的特定名称,可以保证单个类最多只能有一个入口点方法。你可以:
public static void
如果您尝试运行该类,除非有一些规则,它将如何选择要使用的方法?对于今天的注释,一个选项可能是要求String[]
方法使用@EntryPoint
arg注释main
或某些此类...但main
解决方案仍然优于{{1}}这是因为编译器可以使用其常规方法签名规则强制每个类限制一个{{1}}方法,而多个方法可以被赋予相同的注释。更不用说在添加注释之前需要一种方法来运行程序,以及C和C ++的先例。
答案 2 :(得分:1)
除了其他人给出的理由之外,还有一个 - 非技术性的,但可能比技术考虑更重要 - :使Java易于学习(主要针对C ++程序员)。回到Java开始时,他们的创建者想要使它成为一种简单的语言,并帮助开发人员从现有语言转换。由于当时使用的主要现有OO语言是C ++,并且入口点被称为main
(确实,正如@Felix指出的那样,从C继承以使C ++尽可能向后兼容),他们在Java中也使用相同的名称。请注意,从那以后,出于同样的原因,C#也采用了相同的约定(虽然形式稍微更为一般)。