JNI的數(shù)據(jù)類型
基本類型
| 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[] | 對象數(shù)組 |
| jbyteArray | byte[] | byte數(shù)組 |
| jshortArray | short[] | short數(shù)組 |
| jintArray | int[] | int數(shù)組 |
| jlongArray | long[] | long數(shù)組 |
| jfloatArray | float[] | float數(shù)組 |
| jdoubleArray | double[] | double數(shù)組 |
| jbooleanArray | boolean[] | boolean數(shù)組 |
| jcharArray | char[] | char數(shù)組 |
| jthrowable | Throwable | Throwable |
jmethodID、jfieldID
jmethodID可用于獲取類中函數(shù)的標識,然后通過此標識來調(diào)用函數(shù)。
jfieldID可用于獲取類中變量的標識,然后通過此標識來讀寫變量。
JNI的類型簽名
- JNI的類型簽名標識了一個特定的Java類型,這個類型可以是類、方法或數(shù)據(jù)類型。
類和對象的簽名
-
采用
L+包名+類名+;的形式,且將包名中的.替換為/。如:
java.lang.String的簽名為Ljava/lang/String;,注意末尾的;也是簽名的一部分。
基本數(shù)據(jù)類型的簽名
-
基本數(shù)據(jù)類型的簽名是有規(guī)律的。
- 一般為首字母的大寫;
- boolean用Z,因為B被byte占用了;
- long用J,因為L用來表示類的簽名。
| Java類型 | 簽名 |
|---|---|
| byte | B |
| short | S |
| int | I |
| long | J |
| float | F |
| double | D |
| boolean | Z |
| char | C |
| void | V |
數(shù)組的簽名
- 一維數(shù)組的簽名就是
[+類型簽名。
| 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 |
-
多維數(shù)組的簽名就是
n個[+類型簽名,其中n表示數(shù)組的維度。如:
int[][]的簽名為[[I。
方法的簽名
-
方法的簽名為:(各參數(shù)類型簽名)返回值類型簽名。
如:
int func1()的簽名為()I。如:
void func2(int i)的簽名為(I)V。如:
boolean func3(int a, double b, String[] c)的簽名為(ID[Ljava/lang/String)Z。