为什么 JVM 无法创建包含 main 方法的 class 对象以便从 class 访问 main 方法,如果它具有 class 的名称?

Why JVM cannot create object of class containing main method in order to access main method from that class, if it has the name of that class?

嗯,我不明白 为什么 JVM 不能创建具有 main 方法的 class 的对象。

如果 JVM 可以通过 class 的 名称访问 main 方法,那么它肯定可以创建 class 的对象!

但是通过 class 名称访问 main 方法背后的原因是什么?

我问这个问题是因为,如果 JVM 具有 class 的名称来访问 main 方法,那么 它肯定可以创建那个对象class 使用该名称。

我想你是在问(实际上)为什么你不能这样写你的“主要”方法:

// (Note: this does not work ...)
public class Test {
    public void main(String[] args) {
        System.out.println("Hello world");
   }
}

注意:main 不是上面的 static ...

答案是:

  1. 因为那不是 Java 在 1990 年代的设计方式。

  2. 我们无法告诉您他们为什么那样设计Java,因为做出决定时我们不在场。

  3. 我们可以推断(当前)Java 团队没有扩展 Java 以允许您执行上述操作的原因是因为没有迫切需要这样做。事实上,static "main" 方法工作正常。有一句话是这样说的:

    If it ain't broken, don't fix it.

如果您希望您的应用程序的入口点是通过一个对象,那么编写代码使其以这种方式工作对您来说是微不足道的。例如:

public class Test {

    public static void main(String[] args) {
        new Test().main(args);
    }

    private void main(String[] args) {
        System.out.println("Hello world");
    }
}

这只是 3 行额外的代码。

请注意,从 Java 的 规范 实现[=] 的角度来看,static main 方法是最简单的方法 共 Java。