【笔记】深入理解 java 虚拟机---Class的文件结构【3

2018-01-05  本文已影响0人  张航_8ee7

7 属性表集合

这节真晦涩啊。 曾经一度想放弃。 包括现在也是似懂非懂的,不过真的看不下去了。先赶紧把会的总结下。

什么是属性表?(好2)

用来描述方法,字段的特征用的。有 21 种预定义属性,最主要的就是Code。

代码

code 的结构,code 就是 具体的代码。

看一下 这个 

依次是  

   0009     attribute_name_index       u2       指向 常量索引第9个      code

   0000001d     attribute_length         u4       属性值长度    

   0001             max_stack                u2         操作数栈的最大值        1

   0001            max_locals                u2            局部变量表所需要的存储空间。 1单位 slot。

   00000005        code_legth             u4            代码的长度                         5

2a b7 00  01 b1     code                                          存储字节码指令的一系列字节流。   具体看 一下 javap 的  

这就是你们写的代码最后的样子!。

我们来 分析下  2a b7 00  01 b1  这段代码 怎么执行了。

【1 】

2a  

【2】

b7  

【3】

0001   这个是   第二步  invokespecial 的参数, 查常量池 0001  。 

我的常量池 是

书上的常量池

【4】 

 b1  

this 的本质。

编译器 编译的时候,将对this关键字的访问当作一个普通方法的参数访问,调用实例时自动传入该参数。

所以我们的  init 方法 和intc 方法,虽然没有参数,但是 locals =1,arg_size =1。 存的就是 this 的这个参数。

code 的expection 表(非必须的)

结构

还有其它与 code 并列的属性。不写了,记不住。

可以参考:

上一篇下一篇

猜你喜欢

热点阅读