我发现当我在同一文件中定义两个名称相同但大小写不同的类时,程序将崩溃。
public class Main {
public static void main(String[] args) {
TestClass testClass = new TestClass();
}
}
class TestClass {}
class Testclass {}
这些是输出信息:
线程“主”中的异常java.lang.NoClassDefFoundError: top / example / study / Testclass(名称错误: 顶部/示例/研究/ TestClass) java.base / java.lang.ClassLoader.defineClass1(本机方法)位于 java.base / java.lang.ClassLoader.defineClass(ClassLoader.java:1009)在 java.base / java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174) 在 java.base / jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:801) 在 java.base / jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:699) 在 java.base / jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:622) 在 java.base / jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:580) 在 java.base / jdk.internal.loader.ClassLoaders $ AppClassLoader.loadClass(ClassLoaders.java:190) 在java.base / java.lang.ClassLoader.loadClass(ClassLoader.java:499) 在com.example.study.Main.main(Main.java:6)
我了解到Java是区分大小写的,为什么会这样呢?谢谢。
答案 0 :(得分:1)
我猜您使用Windows或至少不区分大小写的文件系统。
Java的编译器使用类的名称生成.class
文件。 TestClass.java
=> TestClass.class
,Testclass.java
=> Testclass.class
。但是,如果文件系统不区分大小写,则TestClass.class
和Testclass.class
是相同的文件名,并且其中一个会覆盖另一个。
相反,使名称的名称不同于大写字母。