我们看到这便来看看这都是什么意思?
第一个我们都不是很陌生
magic魔数 CAFFBABE
minor_version, major_version这个类文件的次要版本号和主要版本号。主版本号和次版本号共同决定类文件格式的版本。如果一个类文件有主版本号 m 和次版本号 m,我们将其类文件格式的版本表示为 m.m。
来看看JDK的支持版本
对于major_version为56或以上的类文件,minor_version必须为0或65535。
对于major_version在45到55之间的类文件,minor_version可以是任何值。
符合 Java SE n (n ≥12)的 Java 虚拟机实现必须具有以下行为:
- 一个类文件依赖于 javase n 的预览特性,只有在启用 javase n 的预览特性时才能加载它。
- 决不能加载依赖于另一个 javase 版本的预览特性的类文件。
- 不管是否启用了Java SE N的预览特性,都可以加载不依赖于任何Java SE发行版预览特性的类文件。
constant_pool_count项的值等于constant_pool表中的条目数加1。一个constant_pool索引被认为是有效的
如果它大于0并且小于constant_pool_count,除了提到的long和double类型的常量。
The CONSTANT_Long_info and CONSTANT_Double_info Structures所有8字节常量在类文件的constant_pool表中占据两个单位。
tag结构体的标签
high_bytes, low_byteshigh_bytes 优先进行存储
constant_pool[]constant_pool是一个结构表,表示各种字符串常量,类和接口名称,字段名称,以及其他在ClassFile结构及其子结构中引用的常量。每个constant_pool表项的格式由其第一个“标记”字节指示。
constant_pool
Access _ flags 项的值是一个标志掩码,用于表示对此类或接口的访问权限和属性。
我们在代码中的修饰符 就是通过这个进行控制
this_classthis_class项的值必须是constant_pool表的有效索引。索引处的constant_pool条目必须是一个CONSTANT_Class_info结构,代表这个类文件定义的类或接口。
super_class对于类,super _ class 项的值必须为零,或者必须是常量 _ pool 表的有效索引。如果 super _ class 项的值非零,则该索引处的 ConSTANT _ pool 条目必须是 ConSTANT _ class _ info 结构,表示由此类文件定义的类的直接超类。直接超类及其任何超类都不能在其 ClassFile 结构的 access _ flags 项中设置 ACC _ final 标志。
interfaces_count类或接口类型的直接超类接口的数量
interfaces[]interfaces数组中的每个值必须是constant_pool表的有效索引。接口[i] (0≤i < interfaces_count)的每个值处的constant_pool项必须是一个CONSTANT_Class_info结构体,该结构体表示一个接口,该接口是该类或接口类型的直接超接口,按照从左到右的顺序。
fields_countfields_count项的值给出了fields表中field_info结构的数量。field_info结构表示由该类或接口类型声明的所有字段,包括类变量和实例变量。
fields[]字段表中的每个值必须是一个field_info结构,该结构给出了类或接口中一个字段的完整描述。fields表只包含由这个类或接口声明的那些字段。它不包括表示从超类或超接口继承的字段的项。
Fieldsaccess_flags 这个就是我们在日常中使用的修饰符的一些标识
methods_countmethods_count项的值给出了method_info结构在方法表中的数量。
methods[]方法表中的每个值必须是一个method_info结构,该结构给出了该类或接口中方法的完整描述。如果在method_info结构的access_flags项中没有设置ACC_NATIVE和ACC_ABSTRACT标志,那么实现该方法的Java虚拟机指令也会被提供。
method_info结构代表了该类或接口类型声明的所有方法,包括实例方法、类方法、实例初始化方法以及任何类或接口初始化方法。方法表不包括表示从超类或超接口继承的方法的项。
attributes_countattributes_count项的值给出了该类属性表中属性的数量。
attributes[]属性表的每个值必须是attribute_info结构



