2

为什么要声明一个main方法?我知道main方法是类的起点。但是为什么我们只应该将它声明为public static void main(String args[])

为什么我们不能将其声明为public static void test(String args[])?是main关键词吗?JVM 如何知道它将是起点?

4

7 回答 7

6

JVM 必须以某种方式知道程序的起点在哪里。设计者选择的标记方式是调用 entry 方法main,因为在 C 中使用相同的名称(当时大多数程序员都熟悉),这是有道理的。这个名字并没有什么特别神奇的地方,他们只是需要选择一些东西,这是一个实际的选择。

于 2013-08-26T06:24:41.700 回答
3

当一个程序开始时,它必须从某个地方开始。嗯,这就是main方法。


为什么是静态的?

  • 当 JVM 调用 main 方法时,被调用的类不存在对象。所以它必须有静态方法才能从类中允许它。

为什么要公开?

  • JVM调用main方法来运行项目范围之外的方法。

为什么作废?

  • 想一想,一旦 main 方法结束,并不意味着程序结束。如果它产生一个新线程,则可能是这些线程仍在运行。
于 2013-08-26T06:26:52.773 回答
1

您的类中可以有许多方法可以是公共的和静态的。JVM如何决定哪个方法是启动程序。为了避免歧义,Java 语言为 JVM 执行的方法确定了一个特定的标准。该标准说“一个自我可执行的类应该有一个具有以下签名的方法:

public static void main(String[] arg) {  }

这是该标准如何帮助 JVM

Public:它允许 JVM 访问和执行您的类的方法 static:该方法可以仅通过类名执行(无需创建对象) void:不返回任何内容(JVM 对您的方法没有任何期望) main:为了让您的类自己可执行文件,JVM 会查找此方法名称,并且您的程序的生命周期从该方法的第一条语句到该方法的最后一条语句是有效的。一旦执行此方法的最后一条语句,您的程序就会终止并且 JVM 实例会终止。此名称标准还有助于 JVM 找到特定的入口点。如果 JVM 允许任何名称,那么它将是多个入口点,并且 JVM 会感到困惑。所以他们决定了一个入口点并将其命名为 main 。

于 2013-08-26T06:33:53.913 回答
1

为什么要声明 main 方法?我知道 main 方法是类的起点。但是为什么我们只应该声明为public static void main(String args[])

基本上,因为这就是它的定义方式。(他们决定使用“main”而不是其他名称的原因是“main”是用于 C 或 C++ 程序入口点的名称。)


为什么我们不能声明为 public static void test(String args[])?

因为那时 JVM 将无法找到入口点。假设,假设入口点方法可以是任何东西。现在考虑这个例子:

public class Test {
    public static void foo(String[] args) { ... }

    public static void bar(String[] args) { ... }
}

...和这个命令行...

$ java Test

哪个方法被调用?foo方法?bar方法?


这是主要的关键词吗?

不,它只是一个众所周知的方法名称。就核心 Java 语言而言,main方法只是具有特定签名的方法。实际上,您可以在同一类中拥有具有不同签名的其他方法。 main


JVM 如何知道它将是起点?

因为它指定JVM使用一个main方法作为起点。


为什么 main 应该出现在 Java 类中?

好吧……您不必main在每个类中都有一个方法……或者实际上是任何类……如果您有其他方法来启动对入口点使用不同约定的JVM。main但除此之外,如果您希望您的应用程序可运行,您至少需要一个具有合适方法的类。

于 2013-08-26T06:36:20.207 回答
0

It is static- 编译器无需创建对象即可进入方法 void- java 是平台无关的。因此,如果它返回一些东西,它可能会因平台而异。

public- 访问

main() 是必需的,以便编译器可以进入您的应用程序。顾名思义,它是应该首先执行的主要方法。

于 2013-08-26T06:26:01.640 回答
0

JVM 遵循规范并以 JLS 的形式与开发人员共享该规范。JVM 在其规范中提到以下形式的 main 方法是任何独立 Java 应用程序的起点:

public static void main(String args[])

从规格:

因此,作为开发人员,我们应该遵守 JVM 规范,以便 JVM 能够理解我们正在尝试做什么。

如果我的回答不是描述性的或无法理解的,请遵循规范:

Java 虚拟机通过调用某个指定类的 main 方法开始执行,并传递给它一个参数,该参数是一个字符串数组

阅读更多:

http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html

于 2013-08-26T06:29:48.123 回答
0

您可以在没有 main 方法的情况下编译任何 Java 类,但如果没有main()方法,独立应用程序将无法运行。

main 方法是定义为在应用程序启动时调用的方法。没有它,就没有地方开始运行。

于 2013-08-26T06:32:04.820 回答