ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Class文件结构解析

2022-03-19 21:04:05  阅读:126  来源: 互联网

标签:文件 常量 版本号 索引 解析 Class 字节


文章目录


前言

java语言能很好地保持向后兼容,class文件结构的稳定性功不可没,下面来介绍class文件的结构

一、class文件结构

class文件是一组以8字节为基础单位的二进制流,各个数据项严格按照顺序紧凑的排列在文件中,中间没有添加任何分隔符。当遇到需要占用8个字节以上空间的数据项时,则会按照高位在前的方式分割 成若干个8个字节进行存储。

《java虚拟机规范》中规定,Class文件采用类似于C语言结构体的伪结构来存储数据,这种伪结构只有两种数据类型:“无符号数”,“表”。

  • 无符号数:属于基本数据类型,以u1、u2、u4、u8来分别表示1个字节、2个字节、4个字节、8个字节的无符号数,无符号数可以用来描述数字,索引引用,数量值,或按照UTF-8编码构成字符串值。
  • :是由多个无符号数或者其他表作为数据项构成的复合数据类型,为了便于区分所有表的命名都习惯以“_info”结尾。表用于描述有层次关系的复合数据结构,整个Class文件本质上也可以是做一张表。
    class文件格式
    表为Class文件格式

二、魔数与Class文件的版本号

Class的结构不像XML等描述语言,由于它没有任何分隔符 号,所以在表中的数据项,无论是顺序还是数量,甚至于数据存储的字节序(Byte Ordering,Class 文件中字节序为Big-Endian)这样的细节,都是被严格限定的,哪个字节代表什么含义,长度是多少, 先后顺序如何,全部都不允许改变。

每个Class文件的头4个字节被称为魔数。它的唯一作用就是确定这个Class文件是否为一个能被虚拟机接受的Class文件。不仅Class文件很过文件格式标准都有使用魔数来进行身份识的习惯。因为Class文件很难被修改。java中的魔数值为 0xCAFEBABE(咖啡宝贝)

紧接着魔数后面的4个字节是Class文件的版本号,第5和第6字节是次版本号,第7第8个字节是主版本号。java的版本号从45开始,jdk1.1后每个大版本发布后都向上加1。

常量池

次、主版本号之后就是常量池入口。常量池可以比喻为Class文件里的资源仓库,它是Class 文件结构中与其他项目关联最多的数据,通常也是占用Class文件空间最大的数据项目之一,另外,它 还是在Class文件中第一个出现的表类型数据项目。

常量池入口
因为常量池的容量不固定,所以在常量池入口需要放置一项u2类型的数据,代表常 量池容量计数值。这个容量计数是从1开始的而不是0。因为0代表特殊含义:“不引用任何一个常量池项目”

常量池中存放两大类常量:字面量和符号引用

访问标志

在常量池结束之后,紧接着的2个字节代表访问标志(access_flags),这个标志用于识别一些类或 者接口层次的访问信息,包括:这个Class是类还是接口;是否定义为public类型;是否定义为abstract 类型;如果是类的话,是否被声明为final;等等。

类索引、父类索引与接口索引集合

类索引(this_class)和父类索引(super_class)都是一个u2类型的数据,而接口索引集合 (interfaces)是一组u2类型的数据的集合,Class文件中由这三项数据来确定该类型的继承关系。类索 引用于确定这个类的全限定名,父类索引用于确定这个类的父类的全限定名。

总结

Class文件格式除了上述之外还有 字段表集合、方法表集合、属性表集合。

标签:文件,常量,版本号,索引,解析,Class,字节
来源: https://blog.csdn.net/m0_57659908/article/details/123601125

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有