我们只能在源文件中声明一个公共文件,文件名必须与公共类名称匹配
这个限制是否有任何理由......
答案 0 :(得分:9)
嗯,这不是Java中的强制限制。这是Java语言规范提到的选项。来自section 7.6 of the JLS:
当软件包存储在文件系统(第7.2.1节)中时,如果在由以下文件组成的名称下的文件中找不到类型,则主机系统可以选择强制执行编译时错误的限制。如果满足以下任一条件,则输入类型名称加上扩展名(例如.java或.jav):
- 该类型由声明类型的包的其他编译单元中的代码引用。
- 该类型声明为public(因此可以从其他包中的代码访问)。
这个限制意味着每个编译单元最多只能有一个这样的类型。这种限制使得Java编程语言的编译器或Java虚拟机的实现很容易在包中找到命名类;例如,公共类型wet.sprocket.Toad的源代码可以在wet / sprocket目录中的Toad.java文件中找到,相应的目标代码可以在同一目录中的Toad.class文件中找到。
但基本上它是鼓励你让你的源更容易导航。如果您知道公共类的名称,通常很容易找到它的源代码。
答案 1 :(得分:1)
是的,这是Java语言的规范......
答案 2 :(得分:1)
原因是,这是惯例。类加载器还需要特定文件中的类。您可以编写自己的类加载器以避免此限制,但没有充分的理由这样做。每个看你代码的人都会感到困惑。 ;)
但是,您可以通过创建内部类在一个文件中创建“多个”类。我知道,它不一样,但通常你应该考虑比一个文件中只有一个类更重要的事情。
答案 3 :(得分:0)
它就在那里,编译器可以找到依赖类的源代码。
答案 4 :(得分:0)
@saravanan。我已经执行了一些简单的程序,这些程序显示只有一个默认类(即没有访问说明符的类),当使用默认类名保存文件名时,main方法在java中运行良好。
为了补充使用公共类名命名文件的原因,在文档中我详细介绍了JVM查找公共类的状态(因为没有限制,可以从任何地方访问)和还在公共类中查找public static void main()。
这个公共类充当初始类,从那里开始java应用程序(程序)的JVM实例。所以当你在程序中提供多个公共类时,编译器本身会通过抛出错误来阻止你。
这是因为稍后您不能将JVM与哪个类作为其初始类混淆,因为只有一个具有public static void main(String args[])
的公共类是JVM的初始类。
希望我帮助您更好地理解JAVA编程命名。
答案 5 :(得分:0)
只记得该类是公开的,其他主要文件不公开