为什么一个java源文件中只能有一个public类

Posted mabingxue

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么一个java源文件中只能有一个public类相关的知识,希望对你有一定的参考价值。

问题:一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

  答案:可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致。一个文件中可以只有非public类,如果只有一个非public类,此类可以跟文件名不同。

 

为什么一个java源文件中只能有一个public类?

  在java编程思想(第四版)一书中有这样3段话(6.4 类的访问权限):

  1.每个编译单元(文件)都只能有一个public类,这表示,每个编译单元都有单一的公共接口,用public类来表现。该接口可以按要求包含众多的支持包访问权限的类。如果在某个编译单元内有一个以上的public类,编译器就会给出错误信息。

  2.public类的名称必须完全与含有该编译单元的文件名相同,包含大小写。如果不匹配,同样将得到编译错误。

  3.虽然不是很常用,但编译单元内完全不带public类也是可能的。在这种情况下,可以随意对文件命名。

 

当java源文件不存在public类时,会出现什么情况?

  技术图片

  此时程序编译通过,在相应路径下产生了三个.class文件。直接点击运行,程序是不能运行的,我们需要鼠标右键点击程序----->Run As----->Java Aplication----->选数据来源

技术图片

 

个人总结:

  一个编译单元(java文件)可以存在多个类,在编译时产生多个不同的.class文件,.class文件便是程序运行的数据来源。java将public类作为每个编译单元的数据接口,只能有一个,不然不能处理存在多个类的java文件。当一个编译单元(java文件)有多个非public类时,运行时需要对数据来源进行选择。

以上是关于为什么一个java源文件中只能有一个public类的主要内容,如果未能解决你的问题,请参考以下文章

Java编译单元为什么只能有一个public类,而且源文件名必须要与类名相同

Java学习笔记

Java基础7:关于Java类和包的那些事

一个JAVA类文件中只能有一个public类吗?

java面试题03

Java基本功很多人经常忽视的Java基础知识点