JNI签名

为什么会有方法签名这种东西呢?这是因为Java这边支持函数重载,即虽然参数不一样,但是方法名一样,那么在JNI层它们的方法名都会是一样的,那JNI也会犯迷糊了,得找哪个呢?
不过也正是因为其参数类型是不一样的,所以就出现了方法签名,利用方法签名和方法名来唯一确定一个JNI函数的调用。
既然方法签名是基于参数类型的不同而形成的,首先要知道Java各数据类型对应的签名是什么,也就是所谓的类型签名

对应于Java端的数据类型,我们也可以看一下下面的表: 
Java 类型 类型签名
boolean Z
byte    B
char    C
short   S
int I
long    L
float   F
double  D
类   L全限定名;,比如String, 其签名为Ljava/lang/util/String;
数组  [类型签名, 比如 [B

因为byte已经是B,所以B被占了,Boolean选择用Z。Long为什么不用L,因为L表示对象,被占用,选择用J

Java层方法                                  JNI函数签名

String test ( )                             Ljava/lang/String;
int f (int i, Object object)                (ILjava/lang/Object;)I
void set (byte[ ] bytes)                    ([B)V  //V: void 返回值


int  [ ][ ] 其描述符为[[I
float[ ][ ] 其描述符为[[F



其中:
 ([B)V  // V: void ,方法返回值,在括号外面 ,[ 代表数组
 (int i, Object object) :(ILjava/lang/Object;)I :返回值I,

其中:
 ([B)V  // V: void ,方法返回值,在括号外面 ,[ 代表数组
 (int i, Object object) :(ILjava/lang/Object;)I :返回值I,

发布了639 篇原创文章 · 获赞 651 · 访问量 58万+

猜你喜欢

转载自blog.csdn.net/qq_38998213/article/details/105327385
JNI
今日推荐