为什么我不能在一个文件中同时定义测试和测试类?



我发现,当我在同一个文件中定义两个名称相同但大小写不同的类时,程序会崩溃。

public class Main {
public static void main(String[] args) {
TestClass testClass = new TestClass();
}
}
class TestClass {}
class Testclass {}

这些是输出信息:

线程"main"java.lang.NoClassDefFoundError中出现异常:top/example/study/Testclass(名称错误:top/example/study/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.studie.Main.Main(Main.java:6(

我了解到java是区分大小写的,那么为什么会发生这种情况呢?谢谢

我猜您使用的是Windows,或者至少是不区分大小写的文件系统。

Java的编译器使用类的名称生成.class文件。TestClass.java=>TestClass.classTestclass.java=>Testclass.class。但是,如果您的文件系统不区分大小写,TestClass.classTestclass.class是同一个文件名,其中一个会覆盖另一个。

相反,以其他的方式使名称不同,而不仅仅是大写。

最新更新