为什么包含 main 的类不必是公共的?

Jag*_*gat 5 java

我宣布了以下课程

class A { //not public
  public static void main(String args[]) {
     System.out.println("done");
 }
Run Code Online (Sandbox Code Playgroud)

当我编译并运行它时,它运行良好并打印输出“完成”。即使我将其声明为“包 a”,行为也相同;

但是,如果 JVM 规范要求 main 方法应该是公共的,因为“否则它看不到 main”,它不应该也适用于类吗?如果 JVM 在 A.main() 未声明为 public 时“看不到”它,它如何能够看到类 A 本身。

除了“因为规范这么说”之外,还有其他解释吗?

Eva*_*ski 4

JVM 始终可以访问应用程序中的每个类,因为它的职责之一是执行可见性规则。因此,可以得出这样的结论:如果需要,它可以忽略可见性规则(例如,当用户启动应用程序时,JVM 必须找到入口点,即main())。

换句话说,JVM 不是访问此函数的类,因此可见性不适用。它基本上是监督者,管理应用程序从执行到终止的整个过程。

有关参考,请参阅执行