基本类型
| JNI类型 | Java类型 | 描述 |
|---|---|---|
| jbyte | byte | 有符号,8位,整型 |
| jshort | short | 有符号,16位,整型 |
| jint | int | 有符号,32位,整型 |
| jlong | long | 有符号,64位,整型 |
| jfloat | float | 32位,浮点型 |
| jdouble | double | 64位,浮点型 |
| jboolean | boolean | 无符号,8位,整型 |
| jchar | char | 无符号,16位,整型 |
| void | void | N/A |
引用类型
| JNI类型 | Java类型 | 描述 |
|---|---|---|
| jclass | Class | 类 |
| jobject | Object | Java对象 |
| jstring | String | 字符串 |
| jobjectArray | Object[] | 对象数组 |
| jbyteArray | byte[] | byte数组 |
| jshortArray | short[] | short数组 |
| jintArray | int[] | int数组 |
| jlongArray | long[] | long数组 |
| jfloatArray | float[] | float数组 |
| jdoubleArray | double[] | double数组 |
| jbooleanArray | boolean[] | boolean数组 |
| jcharArray | char[] | char数组 |
| jthrowable | Throwable | Throwable |
jmethodID、jfieldID
-
jmethodID可用于获取类中函数的标识,然后通过此标识来调用函数。
-
jfieldID可用于获取类中变量的标识,然后通过此标识来读写变量。
类和对象的签名
-
采用
L+包名+类名+;的形式,且将包名中的.替换为/。如:
java.lang.String的签名为Ljava/lang/String;,注意末尾的;也是签名的一部分。
基本数据类型的签名
-
基本数据类型的签名是有规律的。
-
1. 一般为首字母的大写; 2. boolean用Z,因为B被byte占用了; 3. long用J,因为L用来表示类的签名。
| Java类型 | 签名 |
|---|---|
| byte | B |
| short | S |
| int | I |
| long | J |
| float | F |
| double | D |
| boolean | Z |
| char | C |
| void | V |
数组的签名
- 一维数组的签名就是
[+类型签名。
| Java类型 | 签名 |
|---|---|
| Object[] | [Ljava/lang/Object |
| String[] | [Ljava/lang/String |
| byte[] | [B |
| short[] | [S |
| int[] | [I |
| long[] | [J |
| float[] | [F |
| double[] | [D |
| boolean[] | [Z |
| char[] | [C |
-
多维数组的签名就是
n个[+类型签名,其中n表示数组的维度。如:
int[][]的签名为[[I。
方法的签名
-
方法的签名为:(各参数类型签名)返回值类型签名。
-
如:int func1()的签名为()I。 如:void func2(int i)的签名为(I)V。 如:boolean func3(int a, double b, String[] c)的签名为(ID[Ljava/lang/String)Z。
本文介绍了JNI(Java Native Interface)的基本类型和引用类型及其与Java类型的对应关系,包括各种数值类型、布尔类型、字符类型等,并详细说明了类、对象、字符串及数组的签名规则。
9127

被折叠的 条评论
为什么被折叠?



