【问题标题】:Why main method needs to be static? [duplicate]为什么 main 方法需要是静态的? [复制]
【发布时间】:2012-12-28 11:00:20
【问题描述】:

可能重复:
Why is the Java main method static?

JAVA还支持反射JAVA为什么需要main方法是静态的?

使用反射我们可以创建类的对象,甚至可以调用该类的方法,所以为什么 JAVA 需要 main 方法是静态的。

感谢您的 cmets。

【问题讨论】:

  • 如果你需要实例化的类在其构造函数中有参数怎么办?你如何从反射中推断它们?
  • 不,Alvin,我知道为什么 main 方法有这个声明,但我更关心的是即使 VM 能够创建类的对象并调用方法,那么为什么会这样。
  • @Alvin - 上下文不同......
  • this answer 会回答这个问题吗?

标签: java main


【解决方案1】:

public static void main(String []args)中每个关键字的解释
1.public:
它必须是public,因为JVM 不是class 的一部分,您可以在其中定义main 方法。所以,它不应该是private
2.static:
JVM 不会构造任何对象来调用main。并且 main 不依赖于class
3.void:
main不会向JVM返回任何有用的信息。程序执行从main()开始,如果正常退出,则以main中的最后一条语句结束。在这之间会发生很多。
4.main:
它只是一个专有名词,用于表明方法的重要性。
5.Array of Strings: 传递给 main 的 args 是一个或多个单词,它们可能是 intfloatcharString。以上所有内容都可以表示为Strings

希望对您有所帮助

【讨论】:

    【解决方案2】:

    唯一可以可靠给出的答案是“because the JLS says so”。引用:

    方法main 必须声明为publicstaticvoid。它必须指定一个声明类型为String 数组的形式参数(第 8.4.1 节)。

    【讨论】:

    • 是的,我同意你的观点,我知道它必须是 public static void 但如果我们得到概念反射,我们必须知道 VM 甚至能够创建包含 main 方法的类对象并调用它使用反射。那么为什么它需要是静态的。
    • @AmolFasale +1 假设除了创建一个对象(必须创建一个默认或固定的构造函数)只是为了启动一个程序之外没有任何收获。这会使创建该类的更多实例变得复杂。
    • @AmolFasale 对于要执行的程序,它必须有 some 入口点,在 Java 中它是给定类的 main() 方法(可以指定Main-Class 在清单中)。限制 main() 可以是什么允许 JVM 能够“运行代码”。就这么简单。
    【解决方案3】:

    嗯,反射是从 Java 1.1 开始引入的,所以最初的 Java 1.0 标准不能基于它们。他们可能有一些类似反射的代码只是为了引导,并且不知道在 Java 仍被称为 Oak 的时候它有多完整。

    此外,这可能是从 C++ 继承的,并进一步从 C 继承。虽然 C++ 也可以先构造一个应用程序对象并在其上调用 virtual main(),但这可能看起来太复杂了,选择使用简单的 @987654322 @,C 开发人员熟悉。

    【讨论】:

      【解决方案4】:

      公共:为了让 JVM 能够访问 main 方法,它必须是公共的。

      静态:因为它非常复杂,或者可能无法预见托管 main 方法的类的实例化标准,所以它必须是静态的,这样 JVM 就可以在不需要的情况下调用它从类中创建一个对象。

      毕竟,在定义一种语言时,您需要一个明确的约定,如果没有这样的强制约束,JVM 设计人员可能会遇到麻烦。

      【讨论】:

        【解决方案5】:

        因为当您运行程序时,运行时环境会寻找带有签名public static void main (String[] args) 的方法。即使支持反射,运行时仍然需要先调用一个类的main方法。

        【讨论】:

          猜你喜欢
          • 2016-05-30
          • 1970-01-01
          • 1970-01-01
          • 2011-03-12
          • 2018-10-27
          • 2012-06-10
          • 2012-08-31
          • 2014-09-10
          • 2014-11-02
          相关资源
          最近更新 更多