为啥我不能在一个文件中同时定义 Test 和 test 类?

Posted

技术标签:

【中文标题】为啥我不能在一个文件中同时定义 Test 和 test 类?【英文标题】:Why can't I define both the Test and test classes in one file?为什么我不能在一个文件中同时定义 Test 和 test 类? 【发布时间】:2019-04-21 02:44:22 【问题描述】:

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

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

【问题讨论】:

我已经尝试过这段代码并且没有出错。请检查您的包裹详情。 @GauravRai1512 - 您可能正在使用 *nix,或者至少是区分大小写的文件系统。 无论如何最好避免在同一个文件中定义多个***类。就像定义仅在大小写上不同的类一样。 【参考方案1】:

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

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

取而代之的是,以其他的方式使名称不同,而不仅仅是大写。

【讨论】:

以上是关于为啥我不能在一个文件中同时定义 Test 和 test 类?的主要内容,如果未能解决你的问题,请参考以下文章

为啥某些 MP4 文件不能通过 HTML5 播放?

LINUX的硬链接不能链接到目录?这是为啥?

为啥不能在 Laravel 5.7 中捕获我定义的 Route 请求的文件 URI?

为啥我不能同时使用 Systick 和 Timer1

Erlang 和 OTP in Action:为啥不能在 telnet 中调用 get_count?

为啥我不能输入我的号码?