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 文件,字段表,方法表中都可以携带自己的属性表集合。

参考资料

  1. https://blog.csdn.net/wowwilliam0/article/details/81383676
  2. Java Guide公众号文章
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐