Why main method needs to be static?
Possible Duplicate:
Why is the Java main method static?
Java支持反射还是Java需要主方法静态为什么?
使用反射,我们可以创建类的对象,甚至调用该类的方法,所以为什么Java需要main方法是静态的。
感谢您对此的评论。
- 如果需要实例化的类在其构造函数中有参数呢?你如何从反思中推断它们?
- 不是Alvin,我知道为什么主方法有这个声明,但我更关心的是,即使VM能够创建类的对象并调用方法,然后为什么会这样。
- @阿尔文环境是不同的…
- 这个答案能回答这个问题吗?
唯一可靠的答案是"因为捷豹路虎这么说"。报价:
The method main must be declared public, static, and void. It must specify a formal parameter (§8.4.1) whose declared type is array of String.
- 是的,我同意你的观点,我知道它需要是公共静态的虚空,但是如果我们得到概念反射,我们就必须知道vm甚至能够创建包含主方法的类的对象,并使用反射来调用它。所以为什么它需要是静态的。
- @AMolFasale+1的假设是,除了创建一个对象(必须创建一个默认的或固定的构造函数)来启动一个程序外,什么都得不到。这将使创建该类的更多实例变得复杂。
- 对于一个要执行的程序,它必须有一些入口点,而在Java中,它是给定类的EDCOX1×0的方法(它可以由清单中的EDCOX1×1)指定。限制main()可以是什么使得JVM能够"运行代码"。很简单。
由于Java 1.1只引入了反射,所以最初的Java 1标准不能基于它们。他们可能有一些类似反射的代码来引导,而且在Java仍然被称为橡树的时候还不知道它是多么的完整。
此外,这可能是从C++继承而来的,并且继承了C。C++还可以首先构建一个应用程序对象,并在其上调用EDCOX1×2,这可能看起来太复杂了,选择是使用一个简单的EDCOX1(1),熟悉C开发人员。
因为运行程序时,运行时环境会查找签名为public static void main (String[] args)的方法。即使支持reflexion,运行时仍需要首先调用类"EDOCX1"〔1〕方法。
说明public static void main(String []args)中的每个关键字1.public号:它必须是public,因为JVM不是class的一部分,您在这里定义main方法,所以它不应该是private。2、static号:JVM不会构造任何对象来调用themain。而MAIN并不依赖于class。3.void号:main不会向JVM返回任何有用的信息。程序执行从main()开始,如果有正常退出,则以main中的最后一条语句结束。在批之间进行。4.main号:它只是用来表示方法重要性的专有名词。5.江户十一〔21〕号:传递给主体的参数是一个或多个单词,它们可以是int、float、char或String。上面的一切都可以用Strings表示。
Hope it helps
公共:为了让JVM能够访问主方法,它必须是公共的。
静态:因为它非常复杂,或者可能无法预见托管主方法的类的实例化条件,所以它被强制为静态的,使得JVM可以调用它而不需要从类中创建对象。
毕竟,在定义一种语言时,您需要一个明确的契约,如果没有这种强制约束,事情可能会给JVM设计人员带来麻烦。