jvm之详解class类文件的结构

Class文件是一组以8位字节为基础单位的二进制流。各个数据项严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分割符。

Class文件结构采用类似C语言的结构来存储数据的,主要有两类数据项,无符号数和表。

 

Class文件中按照严格 的顺序排列的字节流包含的数据:

ClassFile{

u4 magic;

u2 minor_version;

u2 major_version;

u2 constant_pool_count;

cp_info constant_pool[count];

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];

}

 

  1. u4 magic表示魔数,表示这个文件的类型是一个CLass文件,Class文件对应的魔数是0xCAFEBABE.
  2. u2 minor_version 表示Class文件的次版本号
  3. u2 major_version 表示文件主版本号
  4. u2 constant_pool_count 表示常量池的数量
  5. cp_info 表示常量池 存储字面量和符号引用,其中字面量主要包括字符串,final常量的值或者某个属性的初始值。而符号引用主要存储类和接口的全限定名称,字段的名称描述符,方法的名称以及描述符

限定类名,就是类名全称,带包路径的用点隔开,例如: java.lang.String。

CONSTANT_Utf8_info tag标志位为1, UTF-8编码的字符串

CONSTANT_Integer_info tag标志位为3, 整形字面量

CONSTANT_Float_info tag标志位为4, 浮点型字面量

CONSTANT_Long_info tag标志位为5, 长整形字面量

CONSTANT_Double_info tag标志位为6, 双精度字面量

CONSTANT_Class_info tag标志位为7, 类或接口的符号引用

CONSTANT_String_info tag标志位为8,字符串类型的字面量

CONSTANT_Fieldref_info tag标志位为9, 字段的符号引用

CONSTANT_Methodref_info tag标志位为10,类中方法的符号引用

CONSTANT_InterfaceMethodref_info tag标志位为11, 接口中方法的符号引用

CONSTANT_NameAndType_info tag 标志位为12,字段和方法的名称以及类型的符号引用

 

  1. u2 access_flags 表示类或者接口的访问信息

 

  1. u2 this_class 表示类的常量索引,指向常量池中CONSTRANT_Class_info的常量
  2. u2 super_class表示超类的索引,指向常量池中的CONSTRANT_Class_info的常量
  3. u2 interface_counts 表示接口的数量
  4. u2 interface[interface_counts]表示接口表,它里面每一项都指向CONSTRANT_Class_info常量
  5. u2 fields_count 表示类的实例变量和类变量的数量
  6. filed_info fields[fields_count]表示字段表的信息,其中字段表的结构如下

field_info{

u2 access_flags;

u2 name_index;

u2 descriptor_index;

u2 attributes_count;

attribute_info attributes[attributes_cou

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值