什么是Class文件?
- Class文件是一组以8字节为单位的字节流,各个数据项目按顺序紧凑排列
- Class文件格式只有两种类型:无符号数和表
- 无符号数是基本数据类型,如u1,u2,u4,u8代表1个字节,2个字节,4个字节,8个字节的无符号数
- 表是由多个无符号数和其他表组成的复合数据结构,一般名称以_info结尾
具体说一下Class文件的结构?
- 首先头4个字节是魔数,有这4个字节的才是Class文件
- 后面第5、6字节是次版本号,第7、8字节是主版本号
- 第9字节开始是常量池,每个常量开头第一个字节表示常量池的某个项目标记,按照标记确定是哪个常量类型,第二个字节是长度,根据长度往后找这么多个字节表示常量
- 常量池结束后两个字节代表访问标志,包括这个Class是类还是接口,是不是public,是不是abstract等
- 访问标志之后是类索引、父类索引和接口索引集合
- 之后是字段表集合,用来描述类/接口中的变量,包括各种修饰符和引用常量池的常量
- 然后是方法表集合,和字段表几乎一样,用来描述类/接口中的方法
- 最后是属性表集合,字段表和方法表都可以拥有自己的属性表集合,例如栈深度、变量存储空间、行号等