gpt4 book ai didi

java - 单个 Java 文件中的多个类,每个类都有一个 main 方法 - 意外行为?

转载 作者:搜寻专家 更新时间:2023-11-01 03:28:58 24 4
gpt4 key购买 nike

我在名为 test.java 的文件中获得了以下代码,该文件位于目录 C:\D\JavaProjects 中

class test
{
public static void main( String[] str )
{
System.out.println( "Hello, World! from test" );
}
}

class Test
{
public static void main( String[] str )
{
System.out.println( "Hello, World!" );
}
}

当我执行“javac test.java”时,它会输出 test.class。现在,如果我执行“java 测试”,我会得到以下输出:

Exception in thread "main" java.lang.NoClassDefFoundError: test (wrong name: Test) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Could not find the main class: test. Program will exit.

但是当我做“java 测试”时,我得到了

Hello, World!

现在,如果我简单地颠倒两个类声明的出现,这样 Test 在测试之前声明,java 编译器将输出文件 Test.class。现在做“java test”给出了输出:

Hello, World! from test

但是“java 测试”给出了

Exception in thread "main" java.lang.NoClassDefFoundError: Test (wrong name: test) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Could not find the main class: Test. Program will exit.

现在,我知道在同一个文件中包含两个包含 main 的类是非常奇怪的,但这种行为似乎完全不合逻辑,更像是一个错误。有人可以指出 Java 语言规范中指定此行为的适当部分吗?非常感谢您的帮助。

最佳答案

大概您在 Windows 上运行,对吗?

这意味着您不能拥有两个仅大小写不同的类 - 因为它们最终都希望位于同一个文件中,如 Test.classtest。 class 在不区分大小写的文件系统中实际上是相同的文件名。

这并不是 Java 中的真正错误 - 只是将不区分大小写的文件系统与赋予文件名含义的语言结合使用的不幸但自然的必然结果。

关于java - 单个 Java 文件中的多个类,每个类都有一个 main 方法 - 意外行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5762897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com