Java:为什么我们可以将顶级类定义为私有?

为什么Java允许顶级类声明为私有? 除了“我们不能进入私人课堂”之外还有什么其他的原因吗?

那么,你不能。 作为私人的顶级类将是完全无用的,因为没有任何东西可以访问它。

Java不允许顶级类是私有的。 只有“公共”或“包裹”。

我相信一个更好的问题是:

顶级课程对私人空间意味着什么?

如果按照访问级别来考虑,上面的级别是封装。 事实上,你可以在Java中包装私人顶级类! 从Oracle(以前称为Sun)Java教程中学习 :

如果一个类没有修饰符(默认,也被称为包私有),它只在它自己的包中可见(包是相关类的命名组 – 你将在后面的课中学习它们)。

根据我所问的问题的答案,这可能符合您对“顶级私人课程”的定义。

私人类是允许的,但只能作为内部或嵌套类。如果你有一个私人的内部或嵌套类,那么访问被限制在该外部类的范围。

如果你有一个私人课程作为顶级课程,那么你无法从任何地方访问它,所以拥有顶级私人课程是没有意义的。

从理论上讲,你可以在private顶级类上实例化和调用方法(如果这样的事情被语言所允许,那么它不是! ),但是你必须使用reflection来做到这一点。 理智的(海事组织)孙认为私人高级class在语言水平上不是一件好事。

实际上,JVM 可能会支持由字节码魔术创build的顶级私有“类”。 但这不是一件有用的事情。


更新 – 实际上, 当前的JVM规范明确指出,类的访问标志字的ACC_PRIVATE位是“保留供将来使用”的,Java实现应该将其视为未设置。 因此,对于严格执行当前规范的任何JVM,上述猜测是没有意义的。

我们不能将外部类声明为私有。 更确切地说,我们不能使用具有外部类的私人访问说明符。 只要您尝试将私有访问说明符与类一起使用,您将在Eclipse中收到一条消息,因为只有public,final和abstract才可以用作类的访问修饰符。

将一个类设为私有是没有任何意义的,因为我们不能在外面访问它的类的代码。

将无法访问该类或其成员。

您不能定义顶级私人(或除公共以外的任何其他)。 你会得到一个编译错误。

 Something.java:6: error: modifier private not allowed here private class Something { ^ 1 error 

你只有两个选项, 公开访问修饰符或根本没有访问修饰符。 通过省略公开,隐含地限制对包内的类访问(aka:package-private)。

这需要了解为什么不需要在Java中声明类为private。 如果你的class级本身是一个独立的程序/软件(这是不太可能的),那么你就已经在一个项目和一个特定的包中定义了它。 所以添加私人关键字是多余的。 如果情况并非如此,那么默认访问就意味着你的程序/软件依赖于不同的类来运行。 如果我们把其中一个类别声明为私有的(如果可能的话),那么我们就限制了其他类的可访问性,这是无用的。 它只是意味着被我们声明为私有的类对于代码运行是没有用的。 这再次使它无用。 如果您指的是包级别访问,那么对于默认访问,我们不需要在它之前声明任何关键字。