问题:一个".java"源文件中是否能够包括多个类(不是内部类)?有什么限制?java
答案:能够有多个类,但只能有一个public的类,而且public的类名必须与文件名相一致。一个文件中能够只有非public类,若是只有一个非public类,此类能够跟文件名不一样。编程
为何一个java源文件中只能有一个public类?spa
在java编程思想(第四版)一书中有这样3段话(6.4 类的访问权限):blog
1.每一个编译单元(文件)都只能有一个public类,这表示,每一个编译单元都有单一的公共接口,用public类来表现。该接口能够按要求包含众多的支持包访问权限的类。若是在某个编译单元内有一个以上的public类,编译器就会给出错误信息。接口
2.public类的名称必须彻底与含有该编译单元的文件名相同,包含大小写。若是不匹配,一样将获得编译错误。编译器
3.虽然不是很经常使用,但编译单元内彻底不带public类也是可能的。在这种状况下,能够随意对文件命名。io
当java源文件不存在public类时,会出现什么状况?编译
此时程序编译经过,在相应路径下产生了三个.class文件。直接点击运行,程序是不能运行的,咱们须要鼠标右键点击程序----->Run As----->Java Aplication----->选数据来源
class
我的总结:权限
一个编译单元(java文件)能够存在多个类,在编译时产生多个不一样的.class文件,.class文件即是程序运行的数据来源。java将public类做为每一个编译单元的数据接口,只能有一个,否则不能处理存在多个类的java文件。当一个编译单元(java文件)有多个非public类时,运行时须要对数据来源进行选择。
---恢复内容结束---