如何在不知道类名的情况下运行Java类



我有一个编译的Java类的内容作为二进制文件(名为X.class)。让我们假设它内部有一个带有适当main方法的类,但我不知道原始类名(它不是X)。

如何使用单个命令行在java上运行它?

您可以使用javap -c <filename>获取类的名称。从那时起,这只是空壳游戏。这适用于OSX:

java $(javap -c File.class | head -n 2 | tail -n1 | cut -f3 -d )

注意子shell中后面的空格-这是隔离类名所必需的。

根据@nikolay vyahhi反馈更新:如果您不确定类名将出现在哪个位置(例如,当不知道类是否为公共类时),可以使用trgrep,如下所示:

java $(javap -c File.class | head -n2| tail -n1 | tr [:space:] \n | grep -A1 "class|interface" | tail -n1)

您可以使用javap来实现这一点:

javap X.class

它将分解类并打印出包、受保护的和公共字段和方法:

Compiled from "Test.java"
public class Test {
  public Test();
  public static void main(java.lang.String...);
}

然后您可以使用它来运行应用程序:

java $(javap X.class | sed -n 's/.*class (.*) {/1/p')

相关内容

  • 没有找到相关文章

最新更新