Java 找不到 class 文件,而 javap 可以
Java cannot find the class file, while javap can
我使用 Java ASM library 编译了一个 class(称为 Test.class)。我决定尝试使用 "java" 命令 运行 来确保我已经正确编译了 class。
但是,当我这样做时,我收到了 "Could not find or load main class Test" 消息。我认为这很奇怪,因为 class 位于当前工作目录中(我也曾尝试将“.”作为 class 路径传递,但无济于事)。然后我尝试用 "javap" 分解它,效果很好,这很奇怪,因为如果 javap 可以找到 class 文件,那么肯定 java应该也可以吧?
这是我的命令行输入和输出:
$ javap -c Test
Compiled from "Test.ash"
public class Test
{
public Test();
Code:
0: aload_0
1: invokespecial #9 // Method "java.lang.Object"."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: return
}
$ java Test
Error: Could not find or load main class Test
$ java Test.class
Error: Could not find or load main class Test
$ java -cp . Test
Error: Could not find or load main class Test
$ java -cp . Test.class
Error: Could not find or load main class Test
可能出了什么问题?我可能会错误地编译 class,但是 javap 肯定会像 java[=29= 一样抱怨] 并且 javap 输出看起来正确。
我发现了问题,我没有用斜杠替换 class' super-class 限定名称中的点。
因此 class 具有 "java.lang.Object" 的超级 class,而不是 "java/lang/Object",这是必需的。
我使用 Java ASM library 编译了一个 class(称为 Test.class)。我决定尝试使用 "java" 命令 运行 来确保我已经正确编译了 class。
但是,当我这样做时,我收到了 "Could not find or load main class Test" 消息。我认为这很奇怪,因为 class 位于当前工作目录中(我也曾尝试将“.”作为 class 路径传递,但无济于事)。然后我尝试用 "javap" 分解它,效果很好,这很奇怪,因为如果 javap 可以找到 class 文件,那么肯定 java应该也可以吧?
这是我的命令行输入和输出:
$ javap -c Test
Compiled from "Test.ash"
public class Test
{
public Test();
Code:
0: aload_0
1: invokespecial #9 // Method "java.lang.Object"."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: return
}
$ java Test
Error: Could not find or load main class Test
$ java Test.class
Error: Could not find or load main class Test
$ java -cp . Test
Error: Could not find or load main class Test
$ java -cp . Test.class
Error: Could not find or load main class Test
可能出了什么问题?我可能会错误地编译 class,但是 javap 肯定会像 java[=29= 一样抱怨] 并且 javap 输出看起来正确。
我发现了问题,我没有用斜杠替换 class' super-class 限定名称中的点。
因此 class 具有 "java.lang.Object" 的超级 class,而不是 "java/lang/Object",这是必需的。