以下观点是自己对同名原因的理解,希望行家不吝赐教!
在讨论这个问题之前,我想请大家思考一个问题。将声明的一个类用public修饰的意义在哪里?我相信很多朋友会想到访问、调用权限声明,public、private等是对其他类能否调用该类的明确界定,其作用是不言而喻的。那么这些与同名问题有什么关联呢?
未限定声明的类可在同一包中被调用,java程序编译时会将源文件生成以各自类命名的.class文件,因此在同一包中不能定义相同名称的类,否则会引发冲突,系统会报错。而声明为public的类可以被包外的类引用,只需要import 包名 文件名.java,就可以使用该类。这里我要指出:编译器在执行这条语句时会根据路径反向查找,而此时的文件名能帮助编译器快速定位所编译类的位置。想要快速实现这一过程,就需要遵循规则,而将声明的类与文件名同名,能很好地解决这一问题。同时,因为未限定声明的类不存在包外调用,所以其命名也能很随意,因为系统不需要花功夫查找它,只是在包内使用时进行遍历。
其实,我们可以把同名理解为规则,编译单元将public修饰符看做是一个java的公开接口,在对一个java程序编译前,会先检验该文件是否符合规范(规则是我只能接收一个或没有public修饰的类,其他的都不准通过!!!)当然,若编译器检查其符合规范且有public声明,为了提高效率,让编程员把该文件命名为与pubic 类同名的文件再好不过。
参考:
一个java源文件为什么只能有一个public类呢?当这个类被修饰public的话,为什么源文件名必须要与类名相同呢?
网友评论