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