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

时间:2016-03-30 21:31:43

标签: java main classname

我有一个内容编译的Java类作为二进制文件(名为X.class)。我们假设它里面有一些类,有一个正确的main方法,但我不知道原始的类名(而且它不是X)。

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

2 个答案:

答案 0 :(得分:2)

您可以使用javap -c <filename>获取课程的名称。从那时起,它只是贝壳游戏。这适用于OS X:

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)

答案 1 :(得分:0)

你可以使用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')