实例探索Class文件(3)

引用字段的简单名称和描述符

引用方法的简单名称和描述符

字符的存放: 
对于0x0001-0x007f的字符将使用一个字节(该字节的0-6位,第7位为0)存放 
对于0x080-0x07ff的字符将使用两个字节(依次高字节的0-5位和低字节的0-4位,剩余位分别为10、110)存放 

对于0x0800-0xffff的字符将使用3个字节(依次为高字节的0-5中间字节的0-5,和低字节的0-3位,剩余位分别为10、10、1110)存放。

实例探索Class文件

(2).CONSTANT_Integer结构:

TypeNameCount
u4   bytes   1  

按高位在前的格式存储int型数据

(3).CONSTANT_Float结构:

TypeNameCount
u4   bytes   1  

按高位在前的格式存储float型数据 
(4).CONSTANT_Doube结构:

TypeNameCount
u8   bytes   1  

按高位在前的格式存储double型数据 
(5).CONSTANT_Long结构:

TypeNameCount
u8   bytes   1  

按高位在前的格式存储long型数据 
(6).CONSTANT_Class结构:

TypeNameCount
u2   name_index   1  

name_index为类或者接口符号引用的CONSTANT_Utf8常量池的索引(全限定名) 
(7).CONSTANT_String结构:

TypeNameCount
u2   sring_index   1  

string_index为字符串的CONSTANT_Utf8常量池的索引 
(8).CONSTANT_Fieldref结构: 
描述了指向字段的符号引用,其内容分两项表示,一项为被引用字段所在类或接口的CONSTANT_Class常量池索引,一项为字段的简单名称和描述符,指向一个CONSTANT_NameAndType常量池

TypeNameCount
u2   class_index   1  
u2   name_and_type_index   1  

(9).CONSTANT_Methodref结构: 
与CONSTANT_Fieldref类似,描述了指向类中声明的方法的符号引用,其内容分两项表示,一项为被引用方法所在类的CONSTANT_Class常量池索引,一项为方法的简单名称和描述符,指向一个CONSTANT_NameAndType常量池

TypeNameCount
u2   class_index   1  
u2   name_and_type_index   1  

(10).CONSTANT_InterfaceMethodref结构: 
与CONSTANT_Methodref类似,描述了指向接口中声明的方法的符号引用,其内容分两项表示,一项为被引用方法所在接口的CONSTANT_Class常量池索引,一项为方法的简单名称和描述符,指向一个CONSTANT_NameAndType常量池

TypeNameCount
u2   class_index   1  
u2   name_and_type_index   1  

(11).CONSTANT_NameAndType结构: 
可以预见,该常量池提供了所引用字段或方法的简单名称和常量池入口

TypeNameCount
u2   class_index   1  
u2   name_and_type_index   1  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/21d552f6d5eec79a30d2df013e6c86d7.html