无论如何要获得用于构建.class文件的编译标志?

时间:2011-02-23 06:15:37

标签: java build compilation flags

我有一堆.class个文件,我自己并没有这些文件。

从这些.class文件中,是否可以知道用于构建它们的各种编译标志?诸如......开启或关闭优化,打开或关闭调试信息等等。

1 个答案:

答案 0 :(得分:3)

没有主要的Java编译器可以进行任何类型的优化(除了一些常量值折叠)。这通常是为JVM在运行时完成的。

要查看是否使用调试信息生成.class,请使用javap标记在其上运行-v,然后查找LineNumberTable属性。他们应该看起来像这样:

  LineNumberTable: 
   line 7: 0
   line 8: 8

如果使用完整的调试信息(包括局部变量)编译类,那么它还包含LocalVariableTable,如下所示:

  LocalVariableTable: 
   Start  Length  Slot  Name   Signature
   0      9      0    argc       [Ljava/lang/String;

实际影响输出的一个编译器标志是-encoding,用于指定输入源文件编码。由于.class文件中的字符串文字始终使用UTF-8,因此无法从.class文件中检测原始源文件编码。