深入了解类文件中的class类结构


class类文件结构

Java技术能够一直保持着非常良好的向后兼容性,Class文件结构的稳定功不可没,任何一门程序语言能够获得商业上的成功,都不可能去做升级版本后,旧版本编译的产品就不再能够运行这种事情。
Java虚拟机只关心是否是符合规定的Class文件,而不关心这个Class文件是由哪个语言编译而来的。
两位16进制数代表1字节,8位2进制数代表1字节。
class文件一定对应着唯一一个类或者是接口,但类和接口不一定有对应的class文件,因为在java中可以动态载入一些类和接口到类加载器,不需要先编译成class文件。
以8字节为单位的文件,数据紧凑排列没有分隔符,如果有些字段超过8字节,就分成好几个8字节的单位来表示它。
Class文件=无符号数+表


1.魔数

Class文件前四个字节存储的是该文件是否符合虚拟机规定的class文件的参数,紧接着后四个是版本号,5-6字节存储次版本号,7-8字节存储主版本号。

2. 常量池

常量池前面需要放置一些u2类型的数据,来表示长度不固定的常量池在这个class文件中的长度。
Class文件中只有常量池的计数从1开始,把0空出来是为了表达这个数字不引用任意一个常量,比如一个数据对于常量的索引是0,那么他就不引用任意一个常量。
常量池包含:
1、字面量
2、常量引用
常量池的每一个常量都是一个表,每个表总有个表名,下图类型那一列就是表名,且每个表的数据结构不一样,没有任何关联。每个类型相似的常量就存储在这个类型的表里。

在这里插入图片描述Class中的方法和引用字段都需要使用Constant_Utf8_info来表示,其最大长度就代表java程序中方法和字段名的最大长度,有时候你的命名是符合规定,但是长度超了,编译器还是会报错。

3.访问标志

常量池结束后两个字节就是访问标志,其代表着这个class文件所代表的类或者接口,虚拟机应该用什么样的方式去访问,是类还是接口,私有还是公有?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值