ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
Class 文件是Java 虚拟机定义并被其所识别的文件格式,通俗地讲,每一个接口或者类对应一个Class 文件。 1.Class 文件格式 1.Class 文件是一组以8 位字节为基础单位的的二进制流。 2.各数据项目之间没有任何分隔符 3.Class 文件格式采用的结构只有两种数据结构:无符号数和表。 4.无符号数:以u1,u2 等表示1,2 个字节的无符号数,无符号数可用于描述数字、索引引用、数量值、字符串值。 5.表:以多个无符号数或者表组成,通常以_info 结尾,整个Class 文件就是一张表。 2.Class 文件的组成: ![](https://img.kancloud.cn/32/78/3278ab6494325d71b7a1be7da54d38da_1380x996.jpg) * 魔数:Class 文件开始四个字节是魔数,用于验证该文件是否能被虚拟机执行 * 版本号:魔数后四个字节则是Class 文件的主版本号和次版本号 * 常量池:版本号后面紧跟着的则是常量池部分。常量池不同与java 中,它是由1 开始计数的,常量痴表的数目是常量个数减一。第0 项为保留项目,用于指示当前Class 文件不需要引用任何一个常量池。常量池中主要包含两大类常量: * 字面量:包括文本字符串,被声明为final 的常量值等。 * 符号引用:包括类和接口的权限定名,字段的名称和描述符,方法的名称和描述符 * 访问标志:常量池部分结束后则是访问标志部分,该部分包括信息:是类还是接口,是否定义为public,是否final,是否abstract 等信息。 * 访问标志之后则是类索引,父类索引,接口索引集合部分,该部分的主要信息为:该类的信息的索引,父类的信息的索引,实现接口的个数和对应接 * 信息的索引。(通过指向一个类型为CONSTANT_Class_info 的类描述符常量,从而在对应的常量池找到相关信息) * 字段表:接下来的部分则是用于描述类声明的变量信息,包括变量的作用域,是否为static,是否为final 等信息。 * 方法表:方法表则是用于描述类中方法的信息,与字段表类似。 * 属性表:属性表在字段表和方法表中都会出现,主要用于描述某些场景特有的信息。比如方法是否抛出异常,被final 声明的变量的值,内部类列表等信息。