⑦. 字段表集合
①. 用于描述接口或类中声明的变量。字段(field)包括 类级变量以及实例级变量,但是不包括方法内部、代码块内部声明的局部变量(local variables)
②. 字段叫什么名字、字段被定义为什么数据类型,这些都是无法固定的,只能引用常量池中的常量来描述
③. 它指向常量池索引集合,它描述了每个字段的完整信息。比如字段的标识符、访问修饰符(public、private或protected)、是类变量还是实例变量(static修饰符)、是否是常量(final修饰符)等
④. 注意事项
字段表集合中不会列出从父类或者实现的接口中继承而来的字段,但有可能列出原本Java代码之中不存在的字段。譬如在内部类中为了保持对外部类的访问性,会自动添加指向外部类实例的字段
在Java语言中字段是无法重载的,两个字段的数据类型、修饰符不管是否相同,都必须使用不一样的名称,但是对于字节码来讲,如果两个字段的描述符不一致,那字段重名就是合法的
⑤. 字段计数器
fields_count的值表示当前class文件fields表的成员个数。使用两个字节来表示
⑥. 字段表
⑥. 字段表访问标识
(我们知道,一个字段可以被各个关键字去修饰,比如:作用域修饰符(public、private、protected)、static修饰符、final修饰符、volatile修饰符等等。因此,其可像类的访问标志那样,使用一些标志来标记字段。字段的访问标志有如下这些)
⑧. 方法表集合
①. 在字节码文件中,每一个method_info项都对应着一个类或者接口中的方法信息。比如方法的访问修饰符(public、private或protected),方法的返回值类型以及方法的参数信息等
②. 如果这个方法不是抽象的或者不是native的,那么字节码中会体现出来
③. 一方面,methods表只描述当前类或接口中声明的方法,不包括从父类或父接口继承的方法。另一方面,methods表有可能会出现由编译器自动添加的方法,最典型的便是编译器产生的方法信息(比如:类(接口)初始化方法()和实例初始化方法())
④. 方法计数器methods_count
methods_count的值表示当前class文件methods表的成员个数。使用两个字节来表示
methods 表中每个成员都是一个method_info结构
⑤. 方法表
⑥. 方法表访问标志
(跟字段表一样,方法表也有访问标志,而且他们的标志有部分相同,部分则不同,方法表具体访问标志如下:)