我有一堆.class
个文件,我自己并没有这些文件。
从这些.class
文件中,是否可以知道用于构建它们的各种编译标志?诸如......开启或关闭优化,打开或关闭调试信息等等。
答案 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
文件中检测原始源文件编码。