Java笔记-JNI各种签名以及例子

目录

 

基本概念

栗子说明


 

基本概念

在JNI中有很多函数某些参数都要使用签名,如下:

Java笔记-JNI各种签名以及例子_第1张图片

其中的sig就是签名;

签名是一种用参数个数和类型区分同名方法的手段,即解决方法重载问题。

其中要特别注意的是:

          1. 类描述符开头的'L'与结尾的';'必须要有;

          2. 数组描述符,开头的'['必须有;

          3. 方法描述符规则: "(各参数描述符)返回值描述符",其中参数描述符间没有任何分隔符号。

描述符很重要,请烂熟于心. 写JNI,对于错误的签名一定要特别敏感,此时编译器帮不上忙,执行make 前仔细检查你的代码。

给出如下的几个表:

Java笔记-JNI各种签名以及例子_第2张图片

下面对这张表进行补充本补充来源于百度

1. 基本类型签名:

Java Native Signature
byte jbyte B
char jchar C
double jdouble D
float jfloat F
int jint I
short jshort S
long jlong J
boolean jboolean Z
void void V

2. 引用数据类型的转换

Java Native Signature
所有对象 jobject L+classname +;
Class jclass Ljava/lang/Class;
String jstring Ljava/lang/String;
Throwable jthrowable Ljava/lang/Throwable;
Object[] jobjectArray [L+classname +;
byte[] jbyteArray [B
char[] jcharArray [C
double[] jdoubleArray [D
float[] jfloatArray [F
int[] jintArray [I
short[] jshortArray [S
long[] jlongArray [J
boolean[] jbooleanArray [Z

 

栗子说明

举几个例子:

如下Java 方法:
long f (int n, String s, int[] arr);
signature: "(ILjava/lang/String;[I)J"

 

编码过程中,对象的签名2中方法都是可以行的。 
例如: java 中 String 
          1.直接签名:java/lang/String 
          2.标准签名:Ljava/lang/String;

 

你可能感兴趣的:(Java)