Java 类的数据结构是什么样子的?

Java 类的文件结构可以在 《Java 虚拟机规范》 中找到答案。 如下的结构所示。

ClassFile {
u4 magic;
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];
}

说明如下:

  • u<n> 为 N Unsigned Byte 的简写表示有多少个无符号字节。
  • 魔数(magic),4 字节,固定为 0xCAFEBABE,标识这是一个有效的 Class 文件。
  • 版本号(minor/major_version),minor_version:次版本号(u2),通常为 0。major_version:主版本号(u2),决定兼容性(如 Java 8 对应 52)。
  • 常量池(constant_pool),constant_pool_count:常量池数量(u2),constant_pool[]:存储字面量、类名、方法名等符号引用(如 CONSTANT_Utf8_info)。
  • 访问标志(access_flags),2 字节位掩码,表示类修饰符(如 public、final)。
  • 类与继承关系,this_class:指向常量池中当前类名的索引(u2),super_class:指向父类名的索引(u2,0 表示 java.lang.Object)。
  • 接口(interfaces),interfaces_count:实现的接口数量(u2),interfaces[]:接口名索引数组(每个 u2 指向常量池)。
  • 字段(fields),fields_count:字段数量(u2),fields[]:每个 field_info 描述字段的访问标志、名称、类型等。
  • 方法(methods),methods_count:方法数量(u2),methods[]:每个 method_info 包含方法名、描述符及属性(如 Code 属性存储字节码)。
  • 属性(attributes),attributes_count:类级属性数量(u2),attributes[]:如 SourceFile(源文件名)、InnerClasses 等。

留言

期待你的留言
0 / 256