Class文件结构的字段表中每个字段都有一个描述符索引,该索引指向常量池中表示该字段 的类型描述符的 CONSTANT_Utf8_info 常量。类型描述符规范如下:
对象类型(ObjectType)的 ClassName 表示一个类或接口的名称,如 String 类型的类型描述符
为 Ljava/lang/String;
,数组类型(ArrayType)的 ComponentType 表示 BaseType、
ObjectType、ArrayType 的其中一种,比如字符串数组的类型描述符为
[Ljava/lang/String;
类型与字段描述符的映射如下表所示:
字段描述符 | 类型 | 含义 |
---|---|---|
B | byte | 基本数据类型 byte |
C | char | 基本数类型 char |
D | double | 基本数据类型 double |
F | float | 基本数据类型 float |
I | int | 基本数据类型 int |
J | long | 基本数据类型 long |
L ClassName ; | reference | 引用类型 |
S | short | 基本数据类型 short |
Z | boolean | 基本数据类型 boolean |
[ FieldType | reference | 数组 |
字段描述符不仅用于描述字段的类型,也用于描述局部变量的类型
方法描述符包含 0 个或多个参数描述符和一个返回值描述符,JVM 根据方法名称和方法描述符 在指定的类中寻找一个符合条件的方法来调用,方法的重载正是利用方法描述符区分不同的 方法
如 main 方法的方法描述符为 ([Ljava/lang/String;)V
(V 表示无返回值)