复制代码 代码如下:
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]; }U4 代表由无符号四个字节组成
u4 magic :是一个固定的数值,java虚拟机里面称为魔数 ,主要是用来标识是否为java虚拟机所支持的文件结构,目前是0xCAFEBABEu2 minor_version; u2 major_version; 代表次版本号和主版本号u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; 这里面代表常量池个数以及常量池信息u2 access_flags : 代表class访问标记,例如:public protectedu2 this_class : 代表这个类的名称 例如 java.lang.Objectu2 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]; java class文件内部属性信息,和java语言定义的属性没有关系,纯粹就是给java虚拟机用的以上都是java虚拟机规范中定义的class文件内部结构信息,可以参考 Java虚拟机规范 (Java SE 7版)这里就不细讲
每种结构又都定义了自己的结构信息,例如:常量池结构,字段信息,方法信息,类信息,这几种结构之间又都互相引用,下面这幅图简要介绍了java class文件的内部结构信息
其中常量池的里面的信息最为复杂,java虚拟机运行时刻的所有信息都是从常量池来获取的,常量池定义了一下几种结构
精彩评论