为什么javac编译的j,当Java类不是public的时候,当出现文件名与class名不一致的时候不会报错?

为什么用javac编译的java源文件时,当Java类不是public的时候,当出现文件名与class名不一致的时候不会报错,public的就会报错?

java语言为了简单,通过文件系统来组织包的结构。这是约定。

作为对比,C#就不这么要求。于是C# 采用 namespace 而不是文件系统来组织包名。

我的一个猜想,是因为微软的windows系统不区分大小写文件名,而Linux/Unix区分,所以Java最初是*nix的,就这么做了。

https://www.cnblogs.com/baby-zhude/p/7918724.html

java一个java文件运行写多个类,但只能最多一个类定义为public,编译后按照类名会为不同类生成不同类名的class文件,在执行时候是以class文件名为准