我写了以下代码
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.
只是为了踢,私人课程也可以举行的演示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:\垃圾>
如果JVM规范要求主要方法应该是公开的,因为"它不能看到主要的"
它可以看到,但它不会将其视为入口点,这就是为什么它会给出NoSuchMethodError:main如果你尝试执行一个没有这种方法的类.
通过经典设计,主要切入点 -
因此,
public static void main(String args[])
Run Code Online (Sandbox Code Playgroud)
作为静态,JVM可以在不创建包含main方法的任何类实例的情况下调用它.不知道这是最主要的原因主要是静态的设计.
在您的示例中具有类似Hello的默认访问的类仅对同一包中的其他类可见.
| 归档时间: |
|
| 查看次数: |
3968 次 |
| 最近记录: |