3.3.13 CONSTANT_MethodType_info常量项
在 常 量 池 列 表 中 , CONSTANT_MethodType_info 常 量 项 用 于 表 示 方 法 的 类 型 。CONSTANT_MethodType_info 常量项的表结构信息,如下所示:
代码 3-17 CONSTANT_MethodType_info 表结构 CONSTANT_MethodType_info { u1 tag; u2 descriptor_index; }上述代码示例中, CONSTANT_MethodType_info 常量项中 tag 项的值为 CONSTANT_ MethodType_info(16)。 descriptor_index 项中的值则是一个指向常量池列表中 CONSTANT_ Utf8_info 常量项(请阅读 3.3.1 节)的有效索引,用于表示方法描述符。
3.3.14 CONSTANT_InvokeDynamic_info常量项
在常量池列表中, CONSTANT_InvokeDynamic_info 常量项用于表示 invokedynamic 指令所用到的引用方法( Bootstrap Method)、引导方法使用动态调用名称( Dynamic Invocation Name)、参数和请求返回类型,以及有选择性的附加被称之为静态参数( Static Arguments)的常量序列。 CONSTANT_InvokeDynamic_info 常量项的表结构信息,如下所示:
代码 3-18 CONSTANT_InvokeDynamic_info 表结构 CONSTANT_InvokeDynamic_info { u1 tag; u2 bootstrap_method_attr_index; u2 name_and_type_index; }上 述 代 码 示 例 中 , CONSTANT_InvokeDynamic_info 常 量 项 中 tag 项 的 值 为CONSTANT_InvokeDynamic_info(18)。 bootstrap_method_attr_index 项的值必须是对当前字节码文件中引导方法的 bootstrap_method 数组的有效索引。而 name_and_type_index 项的值则是一个指向常量池列表中 CONSTANT_NameAndType_info 常量项(请阅读 3.3.11 节)的有效索引,用于表示方法的简单名称和方法描述符。
3.4 字段表
相信大家都应该知道,在 Java 语法层面上是不允许在一个类或者接口中声明多个具有相同标示符名称的字段,当然如果这些字段彼此之间所处的作用域不相同时,那么这就会被允许。换句话说, Java 的设计者们之所以不允许这么做主要是为了避免一些不必要的异常情况出现,试想一下,如果相同的作用域上出现多个标示符名称相同的字段,那么你又如何有效访问到指定的目标字段上呢?因此 Java 语法规范不允许这么做。
在字节码文件中,每一个 field_info 项都对应着一个类或者接口中的字段信息,用于表示一个字段的完整信息,比如字段的标示符、访问修饰符( public、 priv