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

索引到位置#4和#20 , 从常量池中找到这两个索引项如下:

#4 = Class #23 //java/lang/Object #20 =NameAndType #7 : #8 //\"init\":()V

这两个索引正好可以跟结构总表中对应上 。 其中 , #4表示的类全限定名为java/lang/Object , 而索引20位置又引用了#7:#8 。 继续找到#7和#8:

#7=Utf8 init #8=Utf8()V

就表示类的构造方法 , ()V表示无参的无返回值的方法描述符 。

从第16位开始的十六进制 09 00 03 00 15这个标志位值为09 , 从字节码结构总表中找到值为9的常量为CONSTANT_Fieldref_info , 其后面跟着两个index , 对应十六进制转换为十进制为3和21 。 #2 =Fieldref #3 . #21 //com/dskj/jvm/bytecode/MyTest1.a:I

对应有两个索引项#3和#21 , 如下所示:

#3 = Class #22 //com/dskj/jvm/bytecode/MyTest1 #21 =NameAndType #5 : #6 //a:I

索引项#3引用了索引项#22 , 索引项#21引用了索引项#5:#6

#22=Utf8com/dskj/jvm/bytecode/MyTest1 #5=Utf8a #6=Utf8I

推荐阅读