源文件不能有多个公共类

sar*_*nan 7 java

我们只能在源文件中声明一个公共文件,文件名必须与公共类名相匹配

这个限制是否有任何理由......

Jon*_*eet 9

嗯,这不是Java中的强制限制.这是Java语言规范提到的一个选项.从JLS第7.6节开始:

当包存储在文件系统(第7.2.1节)中时,如果在由类型名称加上名称的文件中找不到类型,主机系统可以选择强制执行编译时错误的限制.如果满足以下任一条件,则为扩展名(例如.java或.jav):

  • 该类型由声明类型的包的其他编译单元中的代码引用.
  • 该类型被声明为public(因此可以从其他包中的代码访问).

这种限制意味着每个编译单元最多只能有一个这样的类型.这种限制使得Java编程语言的编译器或Java虚拟机的实现很容易在包中找到命名类; 例如,公共类型wet.sprocket.Toad的源代码可以在wet/sprocket目录中的Toad.java文件中找到,相应的目标代码可以在同一目录中的Toad.class文件中找到.

但基本上它是鼓励你让你的源更容易导航.如果您知道公共类的名称,通常很容易找到它的源代码.

  • 这是一个可选限制,但是(AFAIK)所有主流Java实现(编译器,JVM,IDE等)都强制执行它. (3认同)
  • @ user587072:"为什么我不能拥有多个公共文件"是什么意思?一个文件不公开,一个类是.如果你有一个以上的公共课,他们不能*两个*都有相关的名字 - 所以至少其中一个更难找到.至于为什么它不适用于非公共类:可能的关键是开发人员更有可能想要找到公共类的源代码而不是非公开类.但说实话,我真的只是在猜测.我认为这种约定对所有类别都有意义. (2认同)