💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
你可能已经注意到上一节中我们使用一个特殊的C字符串"Ljava/lang/String;"来标识一个属性类型。这种C字符串被叫做JNI属性描述符。 属性描述符字符串的内容是由属性的声明类型决定的。例如,你使用"I"表示int属性,使用"F"表示float属性,使用"D"表示double属性,使用"Z"表示boolean属性等。 对于引用各类型属性的描述符,比如java.lang.String, 需要以字母"L"开头, 解析来是JNI类描述符(我们在3.3.5节介绍过), 并使用一个逗号结束。Java中完整类名中的"."被"/"替换掉了。因此,对于java.lang.String类型需要使用以下形式的属性描述符: `"Ljava/lang/String;"` 数组类型的描述符由"["以及数组元素类型的描述符组成,例如,"[I"表示整型数组的属性描述符,12.3.3节包含了属性描述符以及他们响应类型的相关细节。 你可以使用`javap`工具(JDK or Java 2 SDK release发布)从class文件生成属性描述符。通常javap会输出一个给定类的属性和方法类型,如果你指定了-s 选项(以及-p选项用于输出私有成员),javap会输出JNI描述符。 `javap -s -p InstanceFieldAccess` 你会看到包含了属性s的JNI描述符 ~~~ ''' s Ljava/lang/String ... ~~~ 使用javap工具可以帮助我们减低手写属性描述符错误的概率。