在《JVM Specification 》中式这样定义Class 文件的结构:
ClassFile {
u4 magic; //魔数 每个Java class文件的前4个字节被称为它的魔数(magic number):0xCAFEBABE。魔数的作用在于,可以轻松地分辨出Java class文件和非Java class文件
u2 minor_version; //运行JDK 次版本号
u2 major_version;//运行JDK主版本 52 表示1.8 class文件的下面4个字节包含了主、次版本号。对于Java虚拟机来说,版本号确定了特定的class文件格式,通常只有给定主版本号和一系列次版本号后,Java虚拟机才能够读取class文件。
u2 constant_pool_count; //常量池
cp_info constant_pool[constant_pool_count-1]; //常量池信息数组
u2 access_flags; //描述的是当前类(或者接口)的访问修饰符, 如public, private等,此外, 这里面还存在一个标志位, 标志当前的额这个class描述的是类, 还是接口
u2 this_class; //对当前类的描述
u2 super_class;//是当前类的超类的信息
u2 interfaces_count;//接口数量
u2 interfaces[interfaces_count];//接口信息
u2 fields_count;//字段数量
field_info fields[fields_count];//字段信息
u2 methods_count;//方法数量
method_info methods[methods_count];//方法信息
u2 attributes_count;//属性数量
attribute_info attributes[attributes_count];//属性信息
}
需要详细了解的话,可以仔细阅读《JVM Specification 》的第四章“The class File Format ”,这里不再详细说明。
或
https://blog.csdn.net/luckydog1991/article/details/51654964