“主要”的必要性(java)

时间:2011-01-23 17:32:53

标签: java

我知道它看起来很疯狂。但是,无论如何。我们都知道主要方法的方式: 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条规则。

3 个答案:

答案 0 :(得分:3)

继续。实现您自己的命令行驱动程序,该驱动程序使用JNI调用接口在您感兴趣的任何入口点启动程序。

'main'的特殊字符纯粹是Java命令行程序的问题。设计师做出了选择。他们的理由并不是很有趣;它不会改变。嗯,确切地说,你可以加入openjdk项目并尝试向他们出售一个功能。

答案 1 :(得分:2)

该方法必须被称为main,因为需要指定该方法是入口点方法。不只是任何带有public static voidString[]参数的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#也采用了相同的约定(虽然形式稍微更为一般)。