为什么包含main方法的类不需要在Java中公开?

Zai*_*han 6 java

我写了以下代码

 
  class Hello //Note the class is not public
  {
        public static void main(String args[]) {
System.out.println("Hello"); } }

因此,当我运行它时,它运行正常并打印输出"Hello".

但是,如果JVM规范要求主要方法应该是公开的,因为"它不能看到主要的",那么它不应该也适用于类吗?如果JVM"未能看到"Hello.main(),当它未被声明为public时,它如何能够看到A类本身.

除了"因为规范是这样说的"之外,还有其他解释吗?

如果JVM能够看到所有类和方法,因为它本身就是"安全/可见性执行器",那么为什么需要将main方法声明为public.

Ted*_*opp 9

只是为了踢,私人课程也可以举行的演示main:

class Outer {
    private static class Inner {
        public static void main(String[] args) {
            System.out.println("Hello from Inner!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从命令行编译并运行良好:

C:\ junk> javac Outer.java
C:\ junk> java Outer $ Inner
Hello from Inner!

C:\垃圾>


Saj*_*tta 5

如果JVM规范要求主要方法应该是公开的,因为"它不能看到主要的"

它可以看到,但它不会将其视为入口点,这就是为什么它会给出NoSuchMethodError:main如果你尝试执行一个没有这种方法的类.

通过经典设计,主要切入点 -

  1. 必须命名为main
  2. 必须公开
  3. 必须是静态的
  4. 必须无效
  5. 必须有一个参数一个字符串数组

因此,

public static void main(String args[])
Run Code Online (Sandbox Code Playgroud)

作为静态,JVM可以在不创建包含main方法的任何类实例的情况下调用它.不知道这是最主要的原因主要静态的设计.

在您的示例中具有类似Hello的默认访问的类仅对同一包中的其他类可见.