2011-02-23 86 views

回答

3

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

要找出一个.class是有或没有调试信息生成,使用-v标志,并寻找LineNumberTable属性在其上运行javap。他们应该是这个样子:

 
    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文件检测到原始源文件编码。