字节码文件
Java 字节码文件(.class):结构与内容详解
字节码文件(.class)是 Java 源码经 javac 编译后的中间产物,是 JVM 可识别的 “机器语言”。它包含类的版本信息、常量、字段、方法、接口等关键数据,是 JVM 实现 “一次编译,到处运行” 的核心载体。本文将详细解析字节码文件的结构、各部分含义及作用,帮助理解 Java 代码如何被 JVM 执行。
字节码文件的整体结构
字节码文件采用二进制格式存储,结构严格遵循 JVM 规范,整体定义如下(基于 JVM 规范):
ClassFile {
u4 magic; // 魔数(识别class文件)
u2 minor_version; // 副版本号
u2 major_version; // 主版本号
u2 constant_pool_count; // 常量池计数器
cp_info constant_pool[constant_pool_count-1]; // 常量池表
u2 access_flags; // 访问标识(类/接口的修饰符)
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]; // 属性表(辅助信息)
}
其中,u1、u2、u4、u8 分别表示 1、2、4、8 字节的无符号整数,用于描述不同长度的数据。