深入理解java虚拟机(1):class文件的认识
根据java虚拟机规范决定,class文件只有两种数据类型:无符号数和表。无符号是主要采用u1、u2、u4、u8来表示一个字节、两个字节、四个字节、八个字节。表是由多个无符号数或者其他表作为数据项构成的复合数据类型。class文件标准。

下面以一个class文件的二进制格式来进行讲解

首先第一个CA FE BA BE表示魔数用来表示是否是一个可以接受的class文件
00 00 表示次版本号 00 32 表示主版本号这里表示jdk1.6以下可以兼容。
00 16是常量池的开始表示,有22个常量,这一个u2表示为有常量池的计算值。后面的是cp_info我们先展示下常量池中的表有哪些类型,这14种类型都有一个共同点一个u1表示tab也就是常量池的项目类型。

首先07表示第一个常量是一个class类型的表,它的数据结构如下

这样可以解析出来00 02也就是他引用了第二个常量,第二个常量又是 01所以这是要给utf字符串,后面u2 00 1D是长度29也就是6F 72 67 2F 66 65 6E 69 78 73 6F 66 74 2F 63 6C 61 7A 7A 2F 54 65 73 74 43 6C 61 73 73内容为org/fenixsoft/clazz/TestClass
后面不一一分析
这是常量结构总表


常量池结束后两个字节表示访问标志

浙公网安备 33010602011771号