class 文件的结构是怎样的

参考答案

一、class文件

Class 文件包含了 Java 虚拟机的指令集符号表、辅助信息的字节码(Byte Code),是实现跨操作系统和语言无关性的基石之一。

一个 Class 文件定义了一个类或接口的信息,是以 8 个字节为单位,没有分隔符,按顺序紧凑排在一起的二进制流。

二、class文件用 “无符号数” 和 “表” 组成的伪结构来存储数据

  • 无符号数:基本数据类型,用来描述数字、索引引用、数量值、字符串值,如u1、u2 分别表示 1 个字节、2 个字节。
  • 表:无符号数和其他表组成,命名一般以 “_info” 结尾。

 

三、class文件的组成部分

1.   魔数 Magic Number

  • Class 文件头 4 个字节,0xCAFEBABE。
  • 作用是确定该文件是 Class 文件。

2.   版本号

  • 4 个字节,前 2 个是次版本号 Minor Version,后 2 个主版本号 Major Version。
  • 从 45 (JDK1.0) 开始,如 0x00000032 转十进制就是 50,代表 JDK 6。
  • 低版本的虚拟机跑不了高版本的 Class 文件。

3.   常量池

  • 常量容量计数值(constant_pool_count),u2,从 1 开始。如 0x0016 十进制 22 代表有 21 项常量。
  • 每项常量都是一个表,目前 17 种。
  • 特点:Class 文件中最大数据项目之一、第一个出现表数据结构。

4.  访问标志

  • 2 个字节,表示类或接口的访问标志。

5.  类索引、父类索引、接口索引集合

  • 类索引(this_class)、父类索引(super_class),u2。
  • 接口索引集合(interfaces),u2 集合。
  • 类索引确定类的全限定名、父类索引确定父类的全限定名、接口索引集合确定实现接口。
  • 索引值在常量池中查找对应的常量。

6.  字段表(field_info)集合

  • 描述接口或类申明的变量。
  • fields_count,u2,表示字段表数量;后面接着相应数量的字段表。
  • 9 种字段访问标志。

7.  方法表(method_info)集合

  • 描述接口或类申明的方法。
  • methods_count,u2,表示方法表数量;后面接着相应数量的方法表。
  • 12 种方法访问标志。
  • 方法表结构与字段表结构一致。

8.  属性表(attribute_info)集合

  • class 文件、字段表、方法表可携带属性集合,描述特有信息。
  • 预定义 29 项属性,可自定义写入不重名属性。

 

以上,是JVM面试题【class文件的结构是怎样的】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧