这一次,彻底弄懂 Java 字节码文件!( 九 )

根据以上 , #5表示的变量名为a , #6表示的变量a的返回类型是I , 即int类型的 。 也就知道了#2 = Fileldref , 对应的是com/dskj/jvm/bytecode/MyTest1.a:I 。

对应到MyTest1类的变量: private int a= 1 ;

从第21位开始的十六进制

07 00 16 标志位为07 , 值为7字节码结构总表中对应常量CONSTANT_Class_info , 索引占用2个字节 , 对应转换为十进制为22 。 #3 = Class #22 //com/dskj/jvm/bytecode/MyTest1 #22 =Utf8com/dskj/jvm/bytecode/MyTest1

从第27位开始的十六进制

十六进制字节码文件: 01 00 01 61 01 00 01 49 01 00 06 3C 69 6E 69 74 3E 01 00 03 28 29 56 01 00 04 43 6F 64 65 01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65 查找标志位为01 , 值为1的结构总表常量为CONSTANT_Utf8-info , length的占用2个字节十六进制为 00 01 , 那么length长度就是1(转换为十进制的值 , 即0 * 16的一次方 + 1) , 后面找到1个字节为61 , 通过HexFiend工具也能看到指向了a 。 所以 , 找到的十六进制:01 00 01 61 常量池中进一步印证下: #6=Utf8I

推荐阅读