Java程序的源文件名与类名之间存在如下关系:

一个Java源文件中可以定义多个类

源文件中定义的类,最多只能有一个类被public关键字修饰

如果源文件中有被public关键字修饰所修饰的类,那么源文件名必须与public所修饰的类同名。

根据以上规则,我们就明白了:当年老师让我们把源文件命名为与类名相同的名称,其实是因为我们所定义的那个类前面有个public关键字。接下来我们深入研究一下几种特殊情况:

源文件中如果没有public所修饰的类,源文件该如何命名

这个问题其实很简单,如果源文件中没有任何一个类被public关键字所修饰,那么我们可以用任意名称来命名这个源文件,只要源文件的名称符合命名规范就可以了。

一个源文件中如果定义了多个类,编译之后会形成几个.class文件

大家看下图,我们在一个源文件当中定义了3个类,那么编译之后会产生多少个.class文件呢?

Java类名和源文件名 java源文件名与程序类名_开发语言


经过编译之后,一共产生了3个.class文件。并且这3个.class文件的名称恰好与源文件中3个类的类名相对应。

Java类名和源文件名 java源文件名与程序类名_开发语言_02


通过这个实验我们就可以得到一个结论:源文件与编译后的字节码文件的名称和数量其实没有一一对应关系,字节码文件的名称和数量其实是由源文件中类的名称和数量决定的。

主方法必须定义在public类当中吗

有一种说法,认为主方法必须被定义到public类当中才能运行,其实这也是一种讹传。大家看图1,图1当中主方法并没有被定义到public类当中,但是我们照样能通过相应的命令执行这个主方法

Java类名和源文件名 java源文件名与程序类名_开发语言_03