ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
JNI使用描述符字符串来表示函数类型,这种方式与表示属性类型的方式很相似。一个函数描述符由他的参数类型和返回值类型组成。参数类型在前,且使用一对括号括起来。参数类型是以他们在函数声明中的顺序罗列的。多个参数类型之间是没有分隔符的。如果一个方法没有参数,可以使用一对空的括号表示。函数的方绘制类型紧跟在包裹参数类型的右括号后边。 例如, "(I)V"代指接收一个整型参数且返回值为空的函数。"()D"代指接收一个double型参数且返回值为空的函数。不要被C函数中想"int f(void)"这样的函数原型误导,认为"(V)I"是有个合法的方法描述符(其实它不是),使用"()I"才是正确的。 方法描述符与类描述符紧密相关,例如方法: `native private String getLine(Stirng);` 具有以下描述符: `"(Ljava/lang/String;)Ljava/lang/String;"` 数组类型的描述符以"["字符开头,后边紧跟着数组元素类型的描述符,例如方法: `public static void main(Stirng[] args)` 的方法描述符如下 `"([Ljava/lang/String;)V"` 第12.3.4节给出类JNI方法描述符的完整列表。你也可以使用javap工具输出JNI方法描述符,例如,运行: `javap -s -p InstanceMethodCall` 你可以获取如下输出 ~~~ ... private callback ()V public static main ([Ljava/lang/String;)V private native nativeMethod ()V ... ~~~ 以上javap命令中的-s用于让javap输出JNI描述符字符串而不是其类型。-p标志位则会让javap输出包含私有成员和方法在内的所有信息。