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 等。
留言
期待你的留言