Class类文件结构

Class类文件结构

Java虚拟机(JVM)的Class类文件结构是一种高度组织化的格式,它遵循特定的二进制布局以便于JVM理解和执行。以下是Class文件结构的主要组成部分:

  1. 魔数(Magic Number)
    • 每个Class文件的起始位置都是一个固定的魔数值,Class文件的头四个字节称为魔数,即 0xCAFEBABE,用于标识这是一个合法的Class文件。

image.png

  1. 版本号(Version Information)
    • 主版本号(Major Version):紧接着魔数后的两个字节表示编译该Class文件的Java编译器所遵从的Java虚拟机版本。
    • 次版本号(Minor Version):紧跟在主版本号之后的两个字节表示Java类文件的次要版本信息。

image.png

  1. 常量池(Constant Pool)
    • 常量池是Class文件中最重要的部分之一,它包含了一系列常量项,如字符串常量、类和接口的全限定名、字段名和描述符、方法名和描述符等。常量池的数量(不包括不使用的第0项)在常量池之前由一个u2类型的计数器表示。

image.png

  1. 访问标志(Access Flags)

    • 用于标识类或接口的访问权限和其他一些类或接口的属性,例如是否是public、abstract、final等。
  2. 类索引(This Class)、父类索引(Super Class)

    • 类索引指向常量池中的一个CONSTANT_Class_info型常量,表示当前类的名字。
    • 父类索引也指向常量池,指出当前类的直接父类的全限定名,除了Object类外,所有的类都有父类。
  3. 接口索引表(Interfaces)

    • 如果类实现了接口,这部分列出的是所有直接实现接口的全限定名列表,也是一个索引到常量池的列表。
  4. 字段表集合(Fields)

    • 描述类或接口声明的所有字段(成员变量),包括其名称、描述符、访问标志以及可能的属性表集合。
  5. 方法表集合(Methods)

    • 列出了类或接口中声明的所有方法,包括方法名、描述符、访问标志以及方法的属性表集合,其中属性表可能包含方法的字节码(Code属性)和异常表(Exception属性)。
  6. 属性表集合(Attributes)

    • 可以为类、字段或方法提供额外的信息,如SourceFile(源文件名)、LineNumberTable(行号表)、ConstantValue(常量字段值)、Code(方法字节码及异常处理信息)等。

整个Class文件就是按照这些结构化数据项的顺序紧密排列,没有填充字节或分隔符。当JVM载入并解析Class文件时,会依据这些结构化的数据构建对应的运行时数据结构,进而执行字节码。

原文链接 https://www.hanyuanhun.cn | https://node.hanyuanhun.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值