使用javap -v,我得到一个这样的输出:
Classfile /C:/temp/classcompare/PartnerRolle.class
Last modified 09.12.2016; size 2880 bytes
MD5 checksum 2deeeaa2734ac86f673bba871c05a997
Compiled from "PartnerRolle.java"
public final class de.continentale.vs.common.model.enums.PartnerRolle extends java.lang.Enum<de.continentale.vs.common.model.enums.PartnerRolle>
Signature: #110 // Ljava/lang/Enum<Lde/continentale/vs/common/model/enums/PartnerRolle;>;
SourceFile: "PartnerRolle.java"
minor version: 0
major version: 51
flags: ACC_PUBLIC, ACC_FINAL, ACC_SUPER, ACC_ENUM
&#34;签名#110&#34;意思?
背景:在使用Ant和Maven(相同的Java版本)进行编译时,我为同一个java源获取不同的类文件。我想弄清楚原因。
答案 0 :(得分:1)
“签名”是相应类或方法的泛型类型签名。 “签名:#110”表示此类的签名存储为.class文件中的常量池条目#110。
JVM specification中描述了用作“签名”属性值的字符串格式。
答案 1 :(得分:1)
javap -v
相当于javap -verbose
。
类文件格式在JVM规范中定义。
如果您查看部分4.7.9. The signature attribute,您会找到Signature
Signature属性是ClassFile,field_info或method_info结构的attributes表中的固定长度属性。 Signature属性记录类,接口,构造函数,方法或字段的签名,其在Java编程语言中的声明使用类型变量或参数化类型。 [...]
Signature属性具有以下格式:
Signature_attribute { u2 attribute_name_index; u4 attribute_length; u2 signature_index; }
Signature_attribute结构的项目如下:
attribute_name_index
attribute_name_index项的值必须是constant_pool表的有效索引。该索引处的constant_pool条目必须是CONSTANT_Utf8_info结构(第4.4.7节),表示字符串“Signature”。
attribute_length
Signature_attribute结构的attribute_length项的值必须为2。
signature_index
signature_index项的值必须是constant_pool表的有效索引。该索引处的constant_pool条目必须是 表示类签名的CONSTANT_Utf8_info结构(第4.4.7节) 如果此Signature属性是ClassFile结构的属性; 如果此Signature属性是a的属性,则为方法签名 method_info结构;或其他字段签名。
Signature #110
表示您的签名存储在常量池表中的索引110处。