(十八)属性表
一、概念 上一章节讲述了方法表,方法体的内容就存放在属性表的“Code”中,如下图。 在Class文件、字段表和方法表都可以携带自己的属性信息,这个信息用属性表进行描述,用于描述某些场景专有的信息。 与Class文件中其它数据项对长度、顺序、格式的严格要求不同,属性表集合不要求其中包含的属性表具有严格的顺序,并且只要属性的名称不与已有的属性名称重复,任何人实现的编译器可以向属性表中写入自己定义的属性信息。虚拟机在运行时会忽略不能识别的属性,为了能正确解析Class文件,虚拟机规范中预定义了虚拟机实现必须能够识别的9项属性。 二、Code 属性 java程序方法体中的代码 经过javac编译器处理后,最终变为字节码指令 存储在Code 属性内。 Code属性出现在方法表的属性集合中,抽象类和接口不存在code属性。 code属性是class类文件中最重要的属性。class文件可以分为代码(code,方法体里面的Java代码)和元数据(Metadata,包括类,字段,方法定义及其他信息)两部分,code属性描述代码,其他数据项都用于描述元数据。 以上一章节的代码为例: public class Test { private int getAge(int userId){ return 10; } public Object getUserName(String sex,Object