我宣布了以下类(class)

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

当我编译并运行它时,它可以正常运行并打印输出“done”。即使当我声明它在“package a”中时,也具有相同的行为;

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

除了“因为规范这样说”以外,对此还有什么解释吗?

最佳答案

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

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

作为引用,请参见Execution

关于java - 为什么包含main的类不必公开?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9640297/

10-13 22:57