嗯,这不是Java中的强制限制.这是Java语言规范提到的一个选项.从JLS第7.6节开始:
当包存储在文件系统(第7.2.1节)中时,如果在由类型名称加上名称的文件中找不到类型,主机系统可以选择强制执行编译时错误的限制.如果满足以下任一条件,则为扩展名(例如.java或.jav):
- 该类型由声明类型的包的其他编译单元中的代码引用.
- 该类型被声明为public(因此可以从其他包中的代码访问).
这种限制意味着每个编译单元最多只能有一个这样的类型.这种限制使得Java编程语言的编译器或Java虚拟机的实现很容易在包中找到命名类; 例如,公共类型wet.sprocket.Toad的源代码可以在wet/sprocket目录中的Toad.java文件中找到,相应的目标代码可以在同一目录中的Toad.class文件中找到.
但基本上它是鼓励你让你的源更容易导航.如果您知道公共类的名称,通常很容易找到它的源代码.