3

我使用Java ASM library编译了一个类(称为 Test.class) 。我决定尝试使用“java”命令运行它,以确保我已经正确编译了该类。

但是,当我这样做时,我收到了“无法找到或加载主类测试”消息。我认为这很奇怪,因为该类位于当前工作目录中(我也尝试将“。”作为类路径传递,但无济于事)。然后我尝试用“javap”对其进行分解,效果很好,这很奇怪,因为如果javap可以找到类文件,那么java肯定也应该能够吗?

这是我的命令行输入和输出:

$ javap -c 测试

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 测试

错误:无法找到或加载主类测试

$ java 测试类

错误:无法找到或加载主类测试

$ java -cp 。测试

错误:无法找到或加载主类测试

$ java -cp 。测试类

错误:无法找到或加载主类测试

可能出了什么问题?我可能错误地编译了该类,但是javap肯定会像java一样抱怨,并且javap输出看起来是正确的。

4

1 回答 1

3

我发现了问题,我没有用斜杠替换类的超类限定名中的点。

因此该类具有“java.lang.Object”的超类,而不是“java/lang/Object”,这是必需的。

于 2015-07-14T21:45:02.500 回答