Java的class文件结构与理解

class文件采用一种类似C语言的结构,里面只有两种数据类型 1 无符号数 ,2 表。

无符号数属于基本数据类型,用u1、u2、u4、u8来表示1个字节,2个字节,4个字节,8个字节。此类型用于描述数字、索引引用、按UTF-8编码后的字符串。

一个clas文件结构图:

 给一个编译后的文件:

1------前4个字节16进制表示0xCAFEBABE 固定不变的魔数(宝贝咖啡,class的固定写法)

2------看到第5字节和6字节表示副版本号0x0000和主版本号0x0033也就是十进制51。查找class版本号可知这个class文件可以被JDK1.7.0 或者以上的虚拟机执行的class文件。

3------常量池计数器是从1开始计数,16进制0016,换做十进制为22,也就是常量池中有21个常量。索引值范围1~21,

这里注意:将索引值设置为0时有特殊含义,不引用任何一个常量池项目的含义。Class文件中只有常量池的容量是从1计数开始。其它一般从0开始

4>常量池:常量池第一项,是0x07,查看表6-3的标志发现它属于CONSTANT_Class_info类型。此类型的结构如上面的常量池的6-4图,其中tag是标志位已经说过了用于区分常量类型,name_index是一个索引值,它指向常量池中一个CONSTANT_Utf8_info类型的常量,这里name_index的值(偏移地址0x0000000B)为0x0002也指向了常量池的第二项。然后依次继续查找。。。
常量类型

访问标致:

猜你喜欢

转载自www.cnblogs.com/wlandyy/p/10111235.html