JNI基础-基本数据类型、签名、常量指针、指针常量

1. JNIEnv里面常用的方法
2. JNIEnv里面基本数据类型

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. 常用签名 方法的签名 (参数)返回值

命令: javap -p -s com.amn.JniSimple

5.常量指针

常量变量: 被常量修饰的变量,不能再次被赋值(和java 差不多)const 关键字修饰
如:const int number = 100;
常量指针:关键字const 在指针之前,指针的地址可以修改,指针指向的值不能修改。

    int num1 = 100;
    int num2 = 200;
    const int * n_p = &num1;
    n_p = &num2;
注: *n_p =300;这样修改指针地址上的内容是不能修改的,n_p=&num2是可以的
6.指针常量:

指针常量: 指针在前,关键字const在后。可以修改内容但是不能修改地址
如:

    int num1 = 100;
    int num2 = 200;

    int * const n_p = &num1;
    *n_p = 300;(可以修改地址上的内容)
    //n_p = &num2;(不能修改地址)
7.Native 层构建 java对象

1.通过全类名获取jclass:jclass point_clazz = (env)->FindClass(env, "com/amn/Point");
2.获取构造函数 jmethodID : jmethodID j_md = (
env)->GetMethodID(env,point_clazz,"","(II)V");
3.构建java层的Point 对象 : 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");

    //构建函数id    jmethodID j_md = (*env)->GetMethodID(env,point_clazz,"方法名","签名");
    jmethodID j_md = (*env)->GetMethodID(env,point_clazz,"","(II)V");

    //构建java层的Point 对象 (*env)->NewObject(env, "构建对象的class","构造函数的id",函数参数)
    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();
    }
    
    


}


你可能感兴趣的:(JNI基础-基本数据类型、签名、常量指针、指针常量)