美文网首页
六. 类文件结构

六. 类文件结构

作者: 柒黍 | 来源:发表于2017-10-10 17:16 被阅读0次

    6.1 Class类文件的结构

    Class文件是一组以8位字节位基础单位的二进制流,当需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。在存储数据中只有两种结构:无符号数和表。

    • 无符号数: 基本的数据类型,以u1、u2、u4、u8来分表表示1字节、2字节、4字节、8字节,可以用来描述数字、索引引用、数量值、字符串值
    • 表: 有多个无符号数或者其他表作为数据结项构成的符合数据类型,都习惯性的以_info结尾

    总结: Class结构中的数据项,无论顺序还是数量等都是被阉割限定的。

    6.1.1 魔数和版本号

    每个Class文件的头4个字节称之为魔数,它的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件,值为 0xCAFEBABE.
    第56个字节是主版本号,78个字节是次版本号.

    6.1.2 常量池

    在版本号之后是常量池入口,常量池可以理解为Class文件之中的资源仓库,是占用Class文件空间最大的数据项目之一.

    • 常量池中的常量数量是不固定的,所以有一个u2类型的数据项代表常量池的计数值

    常量池中存放两大类常量:字面量符号引用.

    • 字面量: 比较接近于java常量的概念,如字符串,申明为final的常量值,
    • 符号引用: 类和接口的全限定名 字段的名称和描述符 方法的名称和描述符
    • 常量池中的每一个常量都是一个表

    6.1.3 访问标志

    access_flags用于识别一些类或者接口层次的访问信息:


    一共有16个标志位可以使用,当前只定义了8个,没有使用的要求一律为0,通过 | 的方式组合.

    6.1.4 类索引,父类索引与接口索引集合

    类索引(this_class)和父类索引(super_class)都是u2类型数据,接口索引(interfaces)是一组u2类型的数据集合

    相关文章

      网友评论

          本文标题:六. 类文件结构

          本文链接:https://www.haomeiwen.com/subject/clmhhxtx.html