Java 类文件结构

                  Class文件格式

  magic:每个Class文件的头4个字节被称为魔数(Magic Number),它的唯一作用是确定这个文件是否为一个能被虚拟机接受的Class文件。Java的magic为:0xCAFEBABE。

  Minor Version:次版本号

  Major Version:主版本号

    Java的版本号是从45开始的,JDK 1.1之后 的每个JDK大版本发布主版本号向上加1(JDK 1.0~1.1使用了45.0~45.3的版本号),高版本的JDK能向下兼容以前版本的Class文件,但                  不能运行以后版本的Class文件,因为《Java虚拟机规范》在Class文件校验部分明确要求了即使文件格式并未发生任何变化,虚拟机也必须拒绝执行超过其版本号的Class文件。

  constant pool count:代表常量池容量计数值,这个容量计数是从1而不是0开始的。在Class文件格式规范制定之时,设计者将第0项常量空出来是有特殊考虑的,这样做的目的在于,如果后面某些指向常量池的索引值的数据在特定情况下需要表达“不引用任何一个常量池项目”的含义,可以把索引值设置为0来表示。Class文件结构中只有常量池的容量计数是从1开始,对于其他集合类型,包括接口索引集合、字段表集合、方法表集合等的容量计数都与一般习惯相同,是从0开始。

 

  constant pool:常量池

  常量池中主要存放两大类常量:字面量(Literal)和符号引用(Symbolic References)。

  字面量比较接近于Java语言层面的常量概念,如文本字符串、被声明为final的常量值等。
  而符号引用则属于编译 原理方面的概念,主要包括下面几类常量:
    ·被模块导出或者开放的包(Package)
    ·类和接口的全限定名(Fully Qualified Name)
    ·字段的名称和描述符(Descriptor)
    ·方法的名称和描述符
    ·方法句柄和方法类型(Method Handle、Method Type、Invoke Dynamic)
    ·动态调用点和动态常量(Dynamically-Computed Call Site、Dynamically-Computed Constant)

      

 

       

 

       

 

       

 

  access flags:访问标志,这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口;是否定义为public类型;是否定义为abstract 类型;如果是类的话,是否被声明为final等等。

    

    this class:类索引。

    super class:父类索引

    interfaces:接口索引集合

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

     

 

    field info:字段表:用于描述接口或者类中声明的变量。

 

  

posted @ 2021-11-09 22:12  学不动了orz  阅读(123)  评论(0)    收藏  举报