本节主要是介绍在.class文件中字段表后面的方法表集合的解读
对于方法表集合,显然会有两个字节u2来表示有多少个方法表,之后对于每个方法表的构成如下
- 访问权限,占据两个字节长度
- 方法名索引,占据两个字节长度,这个部分指的是在常量池中的索引位置
- 方法的描述符索引,占据两个字节的长度,这部分指的是在常量池中的索引位置
需要注意的是,在方法表集合中,不会包含父类的方法或者接口中的方法但是有的时候也会出现一些在本方法中没有定义的方法例如< init >方法,这个方法是jvm自动添加的初始化方法,这个特性和字段表集合相同。同时在JVM中对于方法重载有着不同的定义,在JVM中,只要方法的描述符不一样,就可以说明这两个方法不一样,而不是单单指参数列表不一样。对于方法而言,方法的描述符指的是参数列表加返回值类型。相当于参数列表一样,返回值不一样,JVM也会认为是重载的方法。
既然方法表和字段表有这么多相似的地方,在本节重新介绍一下字段表
-
字段的访问标识,主要是指public volation什么的
-
字段名在常量池中的索引
-
字段的描述符,这部分主要指的是字段类型例如,如果是int,则这个描述符就是I
-
字段的属性集合,这部分是存储一些额外的信息。前两个字节表示属性的个数,后面的依次就是具体的属性了
其实字段表集合以及方法表集合的内容完全一致。