.java 文件中的包私有类 - 为什么它可以访问?

2022-01-13 00:00:00 package jvm java

考虑以下代码,其中 HelloWorld 类具有默认或包私有访问权限:

Consider the following code, where the HelloWorld class has default or package-private access:

class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // Display the string.
    }
}

并假设上述代码保存在一个名为HelloWorld.java 的文件中.所以我的问题是:既然 HelloWorld 现在是一个包私有类,它是如何工作的?main() 方法不应该跨包可见或可访问,对吗?

And assume that the above code is saved in a file called HelloWorld.java. So my question is: since HelloWorld is now a package-private class, how does it work? The main() method should not be visible or accessible across packages, am I right?

如果将类 HelloWorld 声明为 public,这对我来说非常有意义.只有在使用默认包私有访问声明时才会混淆.

It makes perfect sense to me if the class HelloWorld is declared public. Confusion is only when it is declared with the default package-private access.

推荐答案

JVM启动在§12.1 JLS 的虚拟机启动.

请注意,本章没有提及关于类的可见性检查.它only 指定main method 必须是public.

Note that this chapter says nothing about visibility checks with regards to the class. It only specifies that the main method must be public.

这意味着根本没有检查类级别的可见性(哪种类型有意义,因为还没有上下文可以检查可见性:在哪个包"中是调用者"?).

This means that there simply is no check for visibility on the class level (which kind-of makes sense as there is no context yet against which to check the visibility: in which "package" is the "caller"?).

相关文章