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

说明在这个十六进制后面找到56个字节作为Code这个属性的具体的值 。 方法表结构: 前三个字段和field_info一样 。 method_info { u2 access_flags; u2 name_index; u2 descriptor_index; u2 attributes_count; attribute_info attributes[attributes_count

方法的属性结构:

JVM预定了部分atrribute , 但是编译器自己也可以实现自己的atrribute写入class文件里 , 供运行时使用 。 不同的attribute通过attribute_name_index来区分 。 Code结构:

Code attribute的作用是保存该方法的结构 , 如所对应的字节码 。 attribute_length表示attribute所包含的字节数 , 不包含atrribute_name_index和attribute_length字段 。 max_stack表示这个方法运行的任何时刻所能达到的操作数栈的最大深度 。 // 00 02 max_locals表示方法执行期间创建的局部变量的数目 , 包含用来表示传入的参数的局部变量的 。 // 00 01 code_length表示该方法所包含的字节码的字节数以及具体的指令码 。 也即助记符 。 // 00 00 00 0A 转换为十进制值为10 , 即跟着后面的10个字节 2A B7 00 01 2A 04 B5 00 02 B1 这些是字节码具体指令 , 对应到构造方法的字节码:

推荐阅读