【JVM】类文件(class文件)结构
Class文件格式采用类似C语言结构体的伪结构来存储数据,这种结构只有两种数据类型:无符号数和表。1 魔数确定这个文件是否为一个能被虚拟机接收的 class 文件。如果一个文件不是以0xCAFEBABE开头,那它就肯定不是Java class文件。2 文件版本Class 文件的版本号,保证编译正常执行。3 常量池简单理解为class文件的资源从库。是在文件中第一个出现的表类型数据项目。是占用Cla
Class文件格式采用类似C语言结构体的伪结构来存储数据,这种结构只有两种数据类型:无符号数和表。

1 魔数
确定这个文件是否为一个能被虚拟机接收的 class 文件。
如果一个文件不是以0xCAFEBABE开头,那它就肯定不是Java class文件。
2 文件版本
Class 文件的版本号,保证编译正常执行。
3 常量池
简单理解为class文件的资源从库。
是在文件中第一个出现的表类型数据项目。
是占用Class文件空间最大的数据项目之一。
主要存放两大常量:字面量和符号引用。
4 访问标志
识别一些类或接口层次的访问信息。
5 当前类索引、父类索引
类索引用于确定这个类的全限定名,父类索引用于确定这个类的父类的全限定名。
Java语言不允许多重继承,故父类索引只有一个。除了java.lang.Object类之外所有类都有父类,故除了java.lang.Object类之外,所有类该字段值都不为0。
6 接口索引集合
描述这个类实现了哪些接口,这些被实现的接口将按implements语句(如果该类本身为接口,则为extends语句)后的接口顺序从左至右排列在接口的索引集合中
7 字段表集合
描述接口或类中声明的变量,包括类级别(static)和实例级别变量,不包括在方法内部声明的变量
8 方法表集合
类中的方法
9 属性表集合
在 Class 文件,字段表,方法表中都可以携带自己的属性表集合。
参考资料
- https://blog.csdn.net/wowwilliam0/article/details/81383676
- Java Guide公众号文章
更多推荐



所有评论(0)