1. JNIEnv里面常用的方法
2. JNIEnv里面基本數(shù)據(jù)類型
jstring : java String
jint : java int
jfloat : java float
jdouble : java double
jobj : java object
jintArray : java int []
3. 回收
如 字符串的回收: (*env)->ReleaseStringUTFChars(env,j_uuid,c_uuid);
pbulic Point test (int x, float y) : (IF)Ljava/awt/Point;
String: Ljava/Lang/String
Object [ ] : [L全類名;
4. 常用簽名 方法的簽名 (參數(shù))返回值
命令: javap -p -s com.amn.JniSimple
5.常量指針
常量變量: 被常量修飾的變量肥荔,不能再次被賦值(和java 差不多)const 關(guān)鍵字修飾
如:const int number = 100;
常量指針:關(guān)鍵字const 在指針之前,指針的地址可以修改朝群,指針指向的值不能修改崖堤。
如
int num1 = 100;
int num2 = 200;
const int * n_p = &num1;
n_p = &num2;
注: *n_p =300郑原;這樣修改指針地址上的內(nèi)容是不能修改的,n_p=&num2是可以的
6.指針常量:
指針常量: 指針在前,關(guān)鍵字const在后琼掠。可以修改內(nèi)容但是不能修改地址
如:
int num1 = 100;
int num2 = 200;
int * const n_p = &num1;
*n_p = 300;(可以修改地址上的內(nèi)容)
//n_p = &num2;(不能修改地址)
7.Native 層構(gòu)建 java對(duì)象
1.通過(guò)全類名獲取jclass:jclass point_clazz = (env)->FindClass(env, "com/amn/Point");
2.獲取構(gòu)造函數(shù) jmethodID : jmethodID j_md = (env)->GetMethodID(env,point_clazz,"<init>","(II)V");
3.構(gòu)建java層的Point 對(duì)象 : jobject point=(*env)->NewObject(env, point_clazz, j_md,10,20);
JNIEXPORT jobject JNICALL java_com_amn_JniSimple_createPoint
(JNIEnv *env, jclass jclz){
//獲取Point 的class FindClass(env,"全類名") 注: 全類名要反斜杠
jclass point_clazz = (*env)->FindClass(env, "com/amn/Point");
//構(gòu)建函數(shù)id jmethodID j_md = (*env)->GetMethodID(env,point_clazz,"方法名","簽名");
jmethodID j_md = (*env)->GetMethodID(env,point_clazz,"<init>","(II)V");
//構(gòu)建java層的Point 對(duì)象 (*env)->NewObject(env, "構(gòu)建對(duì)象的class","構(gòu)造函數(shù)的id",函數(shù)參數(shù))
jobject point=(*env)->NewObject(env, point_clazz, j_md,10,20);
return point;
}
package com.amn;
public class Point {
private int x;
private int y;
public Point(int x, int y) {
this.x=x;
this.y=y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
package com.amn;
import java.util.UUID;
public class JniSimple {
static {
System.load("D:/VisualStudio/work_place/NDK_02/x64/Debug/NDK_02.dll");
}
public static void main(String[] args) {
// callStaticMethod();
Point point=createPoint();
System.out.println(point.getX());
}
private native static Point createPoint();
private native static void callStaticMethod();
public static String getUUID() {
return UUID.randomUUID().toString();
}
}