Class文件结构的字段表中每个字段都有一个描述符索引,该索引指向常量池中表示该字段 的类型描述符的 CONSTANT_Utf8_info 常量。类型描述符规范如下:

BaseType: one of
  B C D F I J S Z
ObjectType:
  L ClassName ;
ArrayType:
  [ ComponentType
ComponentType:
  FieldType(BaseType、ObjectType、ArrayType)

对象类型(ObjectType)的 ClassName 表示一个类或接口的名称,如 String 类型的类型描述符 为 Ljava/lang/String; ,数组类型(ArrayType)的 ComponentType 表示 BaseType、 ObjectType、ArrayType 的其中一种,比如字符串数组的类型描述符为 [Ljava/lang/String;

类型与字段描述符的映射如下表所示:

字段描述符类型含义
Bbyte基本数据类型 byte
Cchar基本数类型 char
Ddouble基本数据类型 double
Ffloat基本数据类型 float
Iint基本数据类型 int
Jlong基本数据类型 long
L ClassName ;reference引用类型
Sshort基本数据类型 short
Zboolean基本数据类型 boolean
[ FieldTypereference数组

字段描述符不仅用于描述字段的类型,也用于描述局部变量的类型

方法描述符包含 0 个或多个参数描述符和一个返回值描述符,JVM 根据方法名称和方法描述符 在指定的类中寻找一个符合条件的方法来调用,方法的重载正是利用方法描述符区分不同的 方法

如 main 方法的方法描述符为 ([Ljava/lang/String;)V (V 表示无返回值)