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

时间:2018-11-18 15:58:01

标签: java

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

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是区分大小写的,为什么会这样呢?谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

相反,使名称的名称不同于大写字母。