Class文件结构

1.魔数与Class文本

  每个Class文件的头4个字节被称之为魔数,他的唯一作用是确定这个文件是否为一个能被虚拟机接受的文件。
Class文件结构

2.版本号

  代表的是16进制的版本号,第5 6 个字节表示次版本号 第7、8个字节表示主版本号 0x 0034 表示的是52版本。
  JDK每发布一个版本,版本号加1 、JDK1.8与之对应的是第52个版本。高版本的JDK支持兼容以前版本发布的class文件,但不能运行以后的版本的Class文件,即使文件格式并未发生任何变化,虚拟机必须拒绝执行超过其版本的Class文件。

3.常量池

  紧接着主次版本号之后的常量池入口,常量池可以理解为Class文件之中的资源仓库,他是Class文件中的与其他项目关联最多的数据类型,也是占用Class文件空间最大的数据项目之一,同时它还是在Class文件中第一个出现的表类型数据项目。
  由于常量池中常量的数量是不固定的,所以在常量池的入口需要放置一项U2类型的数据,代表常量池容量计数值,常量池的下标是从1开始的,0的特使意义在于满足之后的某些指向常量池的索引值的数据在特定的情况下需要表达“不引用任何一个常量池项目”。
  常量池主要存放两大类常量:
  1.字面量:文本字符串,被声明为Final的常量值等
  2.符号引用:类和接口的全限定名 字段的名称和描述符 方法的名称和描述符。