类名是否与java中的文件名相同?

类名是否与java中的文件名相同?,java,Java,在java中,文件名应该和主类的文件名相同。这是告诉编译器这是您的入口点的一种方式。但为什么这件事有效: class xyz{ public static void main(String[] args){ System.out.println("a"); } } 即使使用不同的文件名保存 为什么在使用不同的文件名保存时,此项不可用: public class xyz{ public static void main(String[] args){ System.out.println("a"

在java中,文件名应该和主类的文件名相同。这是告诉编译器这是您的入口点的一种方式。但为什么这件事有效:

class xyz{
public static void main(String[] args){
System.out.println("a");
}
}
即使使用不同的文件名保存

为什么在使用不同的文件名保存时,此项不可用:

public class xyz{
public static void main(String[] args){
System.out.println("a");
}
}

公共类必须位于文件名正确的文件中。非公共类可以位于您想要的任何文件中。如果方便的话,甚至可以在同一个文件中包含多个类。

请注意:

class xyz
不是公共类,因此无法从文件外部访问它。因此,它不需要具有相同的名称。但在这种情况下:

public class xyz
您确实有一个公共类,它将从文件外部访问,因此它确实需要具有相同的名称


结论:公共类的文件名必须与类完全相同。

classname==filename规则仅适用于
public
类。有关更多信息,请参阅。此外,类可能是动态生成的,根本不对应于任何文件。或者该类可能是从网络下载的,或者是从其他任何可能不是光盘上文件的地方获得的。好问题——jvm的规范没有提到命名约定;可能只是所有实现都同意的一种常识选择——尽管我会说这是另一种方式:文件名必须与类名匹配如果我用文件名编译它,然后通过调用我的具有主函数的类名来运行它,它正在工作,这是否意味着文件名不一定与类名相同?这是否意味着我的代码中不必有公共类?我知道,但为什么会这样?有什么特别的原因吗?为什么一开始就这样做?我已经看过这篇文章了。我怀疑即使是非公共类也可以有main方法,所以当jvm搜索入口点时,这不会给jvm带来问题吗?我认为这是一个“良好实践”的选择。语言设计者希望防止人们在同一个文件中有多个公共类。Sun介绍了这一点,这样jvm就不必花时间搜索入口点,但假设我的程序只有非公共类,其中一个有一个主函数,那么这不是问题吗?Sun介绍了这一点,所以jvm不必花时间搜索入口点,但假设我的程序只有非公共类,其中一个有一个主函数,那么这不是一个问题吗?我认为这是行不通的。在这个非公开的课程中,你将不能称你为主要方法,我希望我能给你展示一下。类xyz{publicstaticvoidmain(String[]args){System.out.println(“a”);}}。。这个节目是你在做的吗?终点站?告诉我你给我的commandlink有一个答案,它说如果你用文件名编译它,然后用类名调用它,它就会工作