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

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 并列的属性。不写了,记不住。

可以参考:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容