类文件结构详解

类文件结构

class文件是一种8位字节的二进制流文件,class文件中的信息是一项一项排列的, 每项数据都有它的固定长度,其中u1、u2、u4、u8分别代表1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用来描述数字、索引引用、数量值,或者按照UTF-8编码构成字符串值。

ClassFile { 
    u4 magic;  // 魔法数字,表明当前文件是.class文件,固定0xCAFEBABE
    u2 minor_version; // 分别为Class文件的副版本和主版本
    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]; // 各种属性
}

实例演示

创建一个空的person类,使用javac命令生成class文件放到sublime会生成一个16进制文本。一个字节表示2个16进制。

cafe babe 0000 0034 000d 0a00 0300 0a07
000b 0700 0c01 0006 3c69 6e69 743e 0100
0328 2956 0100 0443 6f64 6501 000f 4c69
6e65 4e75 6d62 6572 5461 626c 6501 000a
536f 7572 6365 4669 6c65 0100 0957 6f72
6b2e 6a61 7661 0c00 0400 0501 0008 636f
6d2f 576f 726b 0100 106a 6176 612f 6c61
6e67 2f4f 626a 6563 7400 2100 0200 0300
0000 0000 0100 0100 0400 0500 0100 0600
0000 1d00 0100 0100 0000 052a b700 01b1
0000 0001 0007 0000 0006 0001 0000 0002
0001 0008 0000 0002 0009

实例说明

u4 magic 一> 4个字节  一> cafe babe 
u2 minor_version  一> 2个字节->  0000
u2 major_version  一>  2个字节  一>  0034(对应10进制的52,代表JDK8的一个版本)
u2 constant_pool_count -> 2个字节 -> 000d(对应十进制13,代表常量池中13个常量)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值