class文件结构

来源:互联网 发布:世界五大宫之首 知乎 编辑:程序博客网 时间:2024/06/05 20:22

     class文件是以8位字节为基础的二进制流,各数据项目按照顺序紧凑排列在class文件中,遇到8位字节以上空间的数据项时,会按照高位在前的方式分割位若干个8位字节进行存储。

文件格式采用类似于c语言结构体的结构存储,结构中只有两种数据类型,无符号数和表。

1.魔数和class文件版本

     每个class文件头4个字节称为魔数,它的作用是确认文件是否能被虚拟机接受的class文件,它的值为 0xCAFEBABE

紧接着魔数的四个字节位从class文件的版本号,第5、6个字节是次版本号,第7、8个字节是主版本号,高版本的JDK能向下兼容低版本的class文件,但不能兼任高版本的文件,

2.常量池

     紧接着主版本号之后的是常量池入口,它是class文件中与其他项目关联最多的数据类型,也是空间最大的项目之一,由于常量池中常量数量不固定,常量池入口放置一个数据表示常量池的容量。

     常量池中主要存放两大类常量:字面量和符号引用,字面量如字符串,final常量值,符号引用包括类和接口的全限定名、子段的名称和描述符、方法的名称和描述符,这些符号引用解析时连接到具体的内存地址中。

3.访问标志

      常量池结束后紧接着的两个字节代表访问标志,这个标志用于一些类或者接口层次的访问信息,如:class文件是类或者接口,是否为public类型,是否为abstract等

4.类索引,父类索引、接口索引集合

          class文件由这三项数据确定这个类的继承关系,类索引用于确定该类的全限定名,父类索引用于确定该类父类的全限定名。接口索引描述该类实现了哪些接口。