1、魔数:前4个字节(0xCAFEBABE),是来确定是否是class文件的。翻译过来就是咖啡宝贝
2、class版本:第5、6个字节是次版本号,第7、8个字节是主版本号
3、常量池入口:接下来存放的就是常量池。常量池是个表结构的。有21项常量。1.7以前共11张表,JDK1.7以后共14张表
常量池主要放2大类常量。字面量和符号引用
字面量:常量。被final修饰的静态变量
符号引用:1)类和接口的全路径名称
2)字段的名称和描述符
3)方法的名称和描述符
4、访问标志:1、这个Class是类还是接口
2、访问范围:是public还是protected
3、是否是abstract类
4、如果是类的话,是否被声明为final
5、类索引、父类索引、接口集合
类索引(唯一):该类的全路径名是唯一的
父类索引(唯一):类只能单继承,一个子类只能继承一个父类,所以这里不是集合,记录父类的全路径名
接口集合(集合、多个):一个类可以实现多个接口。所以是接口集合,存放着N个接口的全路径名
6、字段表集合:
首先是一张表。表中存放着
1)字段的作用于:public protected private
2)是实例变量还是类变量(是否被static修饰)
3)可否被序列化(transient修饰)
4)字段数据类型(基本类型,对象,数组)
5)并发可见性(volitle并发可见性)
6)字段名称
7、方法表集合
首先是一张表。
因为volatile、transient不能修饰方法,所以表中没有这俩字段
记录了与之相对的synchronized、native、stictfp和abstract关键字
8、属性表集合:
在Class文件、字段表、方法表都可以携带自己的属性表集合
8、Class类文件的结构
最新推荐文章于 2022-10-28 14:38:24 发布