什么是#34;签名"在javap -v

时间:2016-12-09 11:58:14

标签: java maven

使用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源获取不同的类文件。我想弄清楚原因。

2 个答案:

答案 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处。