![](https://csdnimg.cn/release/download_crawler_static/10039119/bg4.jpg)
Java
类型在
C/C++
中的映射关系
Jclass
的取得
· 为了能够在 C/C++中使用 java 类,jni.h 头文件中专门定义了 jclass 类型来表示 java 中的
Class 类。
typedef _jclass *jclass;
· JNIEnv 类中有如下几个简单的函数可以取得 jclass:
jclass FindClass(const char *name)
jclass GetObjectClass(jobject obj)
jclass GetSuperclass(jclass sub)
·
FindClass
会在
classpath
系统环境变量下寻找类传入完整类名,注意包与包之间是用
”/”
而不再是
”.”
来分隔,如:
jclass cls_string = env
findClass(“java/lang/String”);
访问
java
类中的属性和方法
· 在 C/C++本地代码访问 java 端的代码,一个常见的问题就是获取类的属性和调用类的方
法,为了在 C/C++中表示属性和方法,JNI 在 jni.h 头文件中定义了 jfieldID,jmethodID 类
型分别代表 java 端的属性和方法。
· 我们在访问或是设置 java 属性的时候,首先就要在本地代码获取代表该 java 类属性的
jfieldID ,然后才能在本地进行 java 属性操作,同样的,我们需要呼叫 java 端的方法时,
也是需要取得该方法 jmethodID 才能进行 java 方法调用
GetStaticFieldID/GetStaticMethodID
来取得相应的 jfieldID 和 jmethodID
· GetFieldID(jclass clazz,const char*name,const char*sign);
· GetStaticFieldID(jclass clazz,const char*name,const char*sign);
· GetMethod ID(jclass clazz,const char*name,const char*sign);
· GetStaticMethodID(jclass clazz,const char*name,const char*sign);
· GetMethodID 也能取得构造函数的 methodID,创建一个 java 对象时可以调用指定的构造