欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > 【面试】class文件结构

【面试】class文件结构

2025/11/16 10:43:50 来源:https://blog.csdn.net/qq_32088869/article/details/139971232  浏览:    关键词:【面试】class文件结构

目录

          • 1. 说明
          • 2. 魔数
          • 3. 版本号
          • 4. 常量池
          • 5. 访问标志
          • 6. 类索引、父类索引和接口索引集合
          • 7.字段表集合、方法表集合和属性表集合

1. 说明
  • 1.class文件的结构并不是一成不变的,随着java虚拟机的不断发展,会对class文件结构做出一些调整。但基本结构和框架是非常稳定的。
  • 2.class文件的总体结构:魔数、版本号、常量池、类的访问标识(标志、控制权限)、类名(类索引)、超类(父类索引)、接口(接口索引集合)、字段(字段表集合)、方法(方法表集合)、属性(属性表集合)。
2. 魔数
  • 1.class文件的标志。
  • 2.文件开始的4个字节的无符号整数称为魔数(magic number),其值为0xCAFEBABE(十六进制表示)。
  • 3.魔数的唯一作用是确定这个文件是否为一个能被Java虚拟机接受的有效合法的Class文件。
  • 4.魔数是Class文件的标识符。
  • 5.如果一个Class文件不以0xCAFFBABE开头,虚拟机在进行文件校验的时候会抛出错误:Error: A JNI error has occured, please check your installation and try again … Incompatible magic value … in class file …
3. 版本号
  • 1.紧接着魔数的4个字节是Class文件的版本号,包括次版本号(Minor Version,占2个字节)和主版本号(Major Version,占2个字节)。
  • 2.版本号用于标识Class文件的兼容性,高版本的JDK能向下兼容以前版本的Class文件,但不能运行以后版本的Class文件。
4. 常量池
  • 1.常量池容量计数值:紧接着版本号的2个字节代表常量池容量计数值(constant_pool_count),表示常量池中有多少项常量。
  • 2.常量池容量计数值是从1开始的。
  • 3.常量池内容:常量池是Class文件结构中与其他项目关联最多的数据,也是占用Class文件空间最大的数据项目之一。
  • 4.常量池主要存放两大类常量:字面量(Literal)和符号引用(Symbolic References)。
  • 5.字面量比较接近于Java语言层面的常量概念,如文本字符串、被声明为final的常量值等。
  • 6.符号引用则属于编译原理方面的概念,主要包括类和接口的全限定名、字段的名称和描述符、方法的名称和描述符等。
5. 访问标志
  • 1.常量池之后是访问标志(access_flags),占2个字节。
  • 2.这个标志用于识别一些类或接口层次的访问信息,如这个Class是类还是接口、是否定义为public类型、是否定义为abstract类型等。
  • 3.如果是类的话,是否被声明为final等。
  • 4.类的访问权限通常为ACC_开头的常量。
6. 类索引、父类索引和接口索引集合
  • 1.类索引:用于确定这个类的全限定名。
  • 2.父类索引:用于确定这个类的父类的全限定名。由于Java语言不允许多重继承,所以父类索引只有一个。除了java.lang.Object之外,所有的Java类都有父类,因此除了java.lang.Object外,所有Java类的父类索引都不为0。
  • 3.接口索引集合:用于描述这个类实现了哪些接口。这些被实现的接口将按implements关键字(如果这个Class文件表示的是一个接口,则应当是extends关键字)后的接口顺序从左到右排列在接口索引集合中。
7.字段表集合、方法表集合和属性表集合
  • 1.字段表集合:用于描述接口或类中声明的变量(不包括在方法内部声明的局部变量)。
  • 2.方法表集合:其结构与字段表类似,用于描述接口或类中声明的方法。
  • 3.属性表集合:在Class文件、字段表、方法表中都可以携带自己的属性表集合,用于描述某些场景专有的信息。属性表集合的限制稍微宽松一些,不再要求各个属性表具有严格顺序。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词