虚拟机系列之 类文件结构

喜夏-厌秋 提交于 2019-12-25 16:29:25

类文件结构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Class的结构不像xml等描述语言,由于它没有任何分隔符号,所以无论是顺序还是数量,都被严格限定,字节含义和长度先后顺序等,都不允许改变。

1 魔数

每个class文件的头4个字节称为魔数,它的唯一作用是用于确定这个文件是否为一个能被虚拟机接受的class文件。(不用扩展名是因为扩展名可以被随意改动,不安全)。class文件的魔数为:0xCAFEBABE;
紧接着魔数的4个字节是存储的class文件的版本号,第5和6个字节是次版本号,7,8个字节是主版本号。
后续讲解以以下代码为例:

public class TestClass {
	private int m;
	public int inc(){
		return m + 1;
	}
}

在这里插入图片描述

2 常量池

常量池是class文件结构中与其他项目关联最多的数据类型,也是占用class文件空间最大的数据项目之一。

在这里插入图片描述
常量池中主要存放两大类常量:字面量和符号引用。
在这里插入图片描述
常量池中的每一项常量都是一个表,共有11种结构各不相同的表结构数据,这11种表开始的第一位是一个u1类型的标志位,代表当前这个常量属于哪种常量类型。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其他同理,常量表如下:
在这里插入图片描述
在这里插入图片描述

3 访问标志

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5 字段表集合

字段表(field_info)用于描述接口或类中声明的变量。字段(field)包括了类级变量或实例级变量。但不包括在方法内部声明的变量。

在这里插入图片描述

全限定名和简单名称,描述符的区别:

在这里插入图片描述
注意例子!!!
字段表(field_info)用来描述接口或类中声明的变量,字段包括类级别变量以及实例级别变量。但不包括方法内部声明的局部变量。

6 方法表集合

在这里插入图片描述
在这里插入图片描述

7 属性表

太难了啊啊啊啊啊啊啊啊

在这里插入图片描述
以code属性为例,其他属性先不涉猎;
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
太乱了未完待续…

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!