第六章类文件结构

class文件是一组以八字节为基础单位的二进制流,class文件格式采用c语言的伪结构来存储数据,它一共有两种数据类型,
一是无符号数:基本数据类型(数字,索引引用,数量值。)
二是表:多个无符号数或其他表构成的复合数据类型。

class类文件结构是被严格限制:
第一:魔术与class文件的版本。
第二:常量池,class文件的资源仓库,常量池中存的是字面量和符号引用。
字面量:字符串和final常量
符号引用:类和接口的全限定名,字段的名称和描述符,方法的名称和描述符。(备注:描述符的作用是用来描述字段的数据类型,方法的参数列表和返回值)

为什么需要符号引用呢?
虚拟机加载class文件的时候进行动态链接。也就是说,在class文件中不会保存各个方法字段的最终内存布局信息,因此这些字段、方法的符号引用不经过运行期转换的话,无法得到真正的内存入口地址,也就是无法直接被虚拟机使用。当虚拟机运行时,需要从常量池中获得对应的符号引用,再在类创建时或运行时解析,翻译到具体的内存地址之中。

第三:访问标志:用于识别类或者接口层次的访问信息。
第四:类索引,父类索引与接口,所以集合:用于确定类的继承关系。
第五:字段表集合:用于描述接口或者类中声明的变量。

备注:字段表集合和方法表集合的存储结构:访问标志,名称索引,描述符索引,属性表集合。其中名称索引和描述符索引是对常量池的应用。

第七:属性表集合:用于描述某些场景专有的信息。

变量赋值一共有两种方式:
对于非静态变量来说。它的赋值是在实例构造器方法中进行的。
而对于那边来说。第一种方法是在类构造器方法中进行赋值;第二种是使用Constantvalue属性。


Boy-20180721

你可能感兴趣的:(第六章类文件结构)