Open a284628487 opened 6 years ago
从原始类数据的缓冲区中加载类。
jclass DefineClass(const char *name, jobject loader, const jbyte* buf, jsize bufLen)
返回值:返回Java类对象。如果出错则返回NULL。 抛出:ClassFormatError:如果类数据指定的类无效。ClassCircularityError:如果类或接口是自身的超类或超接口。OutOfMemoryError:如果系统内存不足。
加载本地定义的类。它将搜索由CLASSPATH环境变量为具有指定名称的类所指定的目录和zip文件。
jclass FindClass(JNIEnv *env, const char *name);
如果clazz代表类而非类object,则该函数返回由clazz所指定的类的超类。如果clazz指定类object或代表某个接口,则该函数返回NULL。
jclass GetSuperclass(JNIEnv *env, jclass clazz);
确定clazz1的对象是否可安全地强制转换为clazz2。
jboolean IsAssignableFrom(JNIEnv *env, jclass clazz1, jclass clazz2);
创建obj参数所引用对象的新全局引用。obj参数既可以是全局引用,也可以是局部引用。全局引用通过调用DeleteGlobalRef()来显式撤消。
jobject NewGlobalRef(JNIEnv *env, jobject obj);
删除globalRef所指向的全局引用。
void DeleteGlobalRef(JNIEnv *env, jobject globalRef);
删除localRef所指向的局部引用。
void DeleteLocalRef(JNIEnv *env, jobject localRef);
分配新Java对象而不调用该对象的任何构造函数。返回该对象的引用。clazz参数务必不要引用数组类。
jobject AllocObject(JNIEnv *env, jclass clazz);
jobject NewObject(JNIEnv *env, jclass clazz, jmethodID methodID, ...); jobject NewObjectA(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args); jobject NewObjectV(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
NewObjectA#args,将所有参数放到jvalue类型的数组当中。 NewObjectV#args,将所有参数放到va_list类型的参数当中。
返回对象的类。
jclass GetObjectClass(JNIEnv *env, jobject obj);
测试对象是否为某个类的实例。
jboolean IsInstanceOf(JNIEnv *env, jobject obj, jclass clazz);
测试两个引用是否引用同一Java对象。
jboolean IsSameObject(JNIEnv *env, jobject ref1, jobject ref2);
返回类的实例对象的字段ID。该字段由其名称及签名指定。访问器函数的GetField及SetField系列使用域ID检索对象域。 GetFieldID()将未初始化的类初始化。
jfieldID GetFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig);
GetFieldID()不能用于获取数组的长度属性。应使用GetArrayLength()。
NativeType Get<type>Field(JNIEnv *env, jobject obj, jfieldID fieldID);
*GetField例程名* 返回类型 GetObjectField() jobject GetBooleanField() jboolean GetByteField() jbyte GetCharField() jchar GetShortField() jshort GetIntField() jint GetLongField() jlong GetFloatField() jfloat GetDoubleField() jdouble
void Set<type>Field(JNIEnv *env, jobject obj, jfieldID fieldID, NativeType value);
*SetField例程名* 本地类型 SetObjectField() jobject SetBooleanField() jboolean SetByteField() jbyte SetCharField() jchar SetShortField() jshort SetIntField() jint SetLongField() jlong SetFloatField() jfloat SetDoubleField() jdouble
jmethodID GetMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig);
返回类或接口实例(非静态)方法的方法ID。方法可在某个clazz的超类中定义,也可从clazz继承。该方法由其名称和签名决定。GetMethodID()可使未初始化的类初始化。要获得构造函数的方法ID,应将作为方法名,同时将void (V)作为返回类型。
从本地方法调用Java实例方法。它们的差别仅在于向其所调用的方法传递参数时所用的机制。这三个操作将根据所指定的方法ID 调用Java对象的实例(非静态)方法。参数methodID必须通过调用GetMethodID()来获得。
NativeType Call<type>Method(JNIEnv *env, jobject obj, jmethodID methodID, ...); NativeType Call<type>MethodA(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args); NativeType Call<type>MethodV(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
当这些函数用于调用私有方法和构造函数时,方法ID必须从obj的真实类派生而来,而不应从其某个超类派生。
*CallMethod例程名* 返回类型 CallVoidMethod() CallVoidMethodA() CallVoidMethodV() void CallObjectMethod() CallObjectMethodA() CallObjectMethodV() jobject CallBooleanMethod() CallBooleanMethodA() CallBooleanMethodV() jboolean CallByteMethod() CallByteMethodA() CallByteMethodV() jbyte CallCharMethod() CallCharMethodA() CallCharMethodV() jchar CallShortMethod() CallShortMethodA() CallShortMethodV() jshort CallIntMethod() CallIntMethodA() CallIntMethodV() jint CallLongMethod() CallLongMethodA() CallLongMethodV() jlong CallFloatMethod() CallFloatMethodA() CallFloatMethodV() jfloat CallDoubleMethod() CallDoubleMethodA() CallDoubleMethodV() jdouble
根据指定的类和方法ID调用某Java对象的实例(非静态)方法。参数methodID必须通过调用clazz类的 GetMethodID()获得。CallNonvirtualMethod和CallMethod并不相同。 CallMethod根据对象的实例调用方法,而CallNonvirtualMethod则根据获得方法ID的(由clazz参数指定)类调用方法。方法ID必须从对象的真实类或 其某个超类获得。
CallNonvirtualMethod
CallMethod
NativeType CallNonvirtual<type>Method(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...); NativeType CallNonvirtual<type>MethodA(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args); NativeType CallNonvirtual<type>MethodV(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args);
*CallNonvirtualMethod例程名* 返回类型 CallNonvirtualVoidMethod() CallNonvirtualVoidMethodA() CallNonvirtualVoidMethodV() void CallNonvirtualObjectMethod() CallNonvirtualObjectMethodA() CallNonvirtualObjectMethodV() jobject CallNonvirtualBooleanMethod() CallNonvirtualBooleanMethodA() CallNonvirtualBooleanMethodV() jboolean CallNonvirtualByteMethod() CallNonvirtualByteMethodA() CallNonvirtualByteMethodV() jbyte CallNonvirtualCharMethod() CallNonvirtualCharMethodA() CallNonvirtualCharMethodV() jchar CallNonvirtualShortMethod() CallNonvirtualShortMethodA() CallNonvirtualShortMethodV() jshort CallNonvirtualIntMethod() CallNonvirtualIntMethodA() CallNonvirtualIntMethodV() jint CallNonvirtualLongMethod() CallNonvirtualLongMethodA() CallNonvirtualLongMethodV() jlong CallNonvirtualFloatMethod() CallNonvirtualFloatMethodA() CallNonvirtualFloatMethodV() jfloat CallNonvirtualDoubleMethod() CallNonvirtualDoubleMethodA() CallNonvirtualDoubleMethodV() jdouble
返回类的静态域的域ID。域由其名称和签名指定。GetStaticField和SetStaticField访问器函数系列使用域ID检索静态域。GetStaticFieldID()将未初始化的类初始化。
jfieldID GetStaticFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig);
NativeType GetStatic<type>Field(JNIEnv *env, jclass clazz, jfieldID fieldID);
*GetStaticField例程名* 本地类型 GetStaticObjectField() jobject GetStaticBooleanField() jboolean GetStaticByteField() jbyte GetStaticCharField() jchar GetStaticShortField() jshort GetStaticIntField() jint GetStaticLongField() jlong GetStaticFloatField() jfloat GetStaticDoubleField() jdouble
该访问器例程系列设置对象的静态字段的值。要访问的域由通过调用GetStaticFieldID()而得到的域ID指定。
void SetStatic<type>Field(JNIEnv *env, jclass clazz, jfieldID fieldID, NativeType value);
*SetStaticField例程名* 本地类型 SetStaticObjectField() jobject SetStaticBooleanField() jboolean SetStaticByteField() jbyte SetStaticCharField() jchar SetStaticShortField() jshort SetStaticIntField() jint SetStaticLongField() jlong SetStaticFloatField() jfloat SetStaticDoubleField() jdouble
返回类的静态方法的方法ID。方法由其名称和签名指定。GetStaticMethodID()将未初始化的类初始化。
jmethodID GetStaticMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig);
这些操作将根据指定的方法ID调用Java对象的静态方法。methodID参数必须通过调用GetStaticMethodID()得到。方法ID必须从clazz派生,而不能从其超类派生。
NativeType CallStatic<type>Method(JNIEnv *env, jclass clazz, jmethodID methodID, ...); NativeType CallStatic<type>MethodA(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args); NativeType CallStatic<type>MethodV(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
*CallStaticMethod例程名* 本地类型 CallStaticVoidMethod() CallStaticVoidMethodA() CallStaticVoidMethodV() void CallStaticObjectMethod() CallStaticObjectMethodA() CallStaticObjectMethodV() jobject CallStaticBooleanMethod() CallStaticBooleanMethodA() CallStaticBooleanMethodV() jboolean CallStaticByteMethod() CallStaticByteMethodA() CallStaticByteMethodV() jbyte CallStaticCharMethod() CallStaticCharMethodA() CallStaticCharMethodV() jchar CallStaticShortMethod() CallStaticShortMethodA() CallStaticShortMethodV() jshort CallStaticIntMethod() CallStaticIntMethodA() CallStaticIntMethodV() jint CallStaticLongMethod() CallStaticLongMethodA() CallStaticLongMethodV() jlong CallStaticFloatMethod() CallStaticFloatMethodA() CallStaticFloatMethodV() jfloat CallStaticDoubleMethod() CallStaticDoubleMethodA() CallStaticDoubleMethodV() jdouble
类操作
DefineClass
从原始类数据的缓冲区中加载类。
返回值:返回Java类对象。如果出错则返回NULL。 抛出:ClassFormatError:如果类数据指定的类无效。ClassCircularityError:如果类或接口是自身的超类或超接口。OutOfMemoryError:如果系统内存不足。
FindClass
加载本地定义的类。它将搜索由CLASSPATH环境变量为具有指定名称的类所指定的目录和zip文件。
GetSuperclass
如果clazz代表类而非类object,则该函数返回由clazz所指定的类的超类。如果clazz指定类object或代表某个接口,则该函数返回NULL。
IsAssignableFrom
确定clazz1的对象是否可安全地强制转换为clazz2。
全局或局部引用
NewGlobalRef
创建obj参数所引用对象的新全局引用。obj参数既可以是全局引用,也可以是局部引用。全局引用通过调用DeleteGlobalRef()来显式撤消。
DeleteGlobalRef
删除globalRef所指向的全局引用。
DeleteLocalRef
删除localRef所指向的局部引用。
对象操作
AllocObject
分配新Java对象而不调用该对象的任何构造函数。返回该对象的引用。clazz参数务必不要引用数组类。
NewObject NewObjectA NewObjectV
GetObjectClass
返回对象的类。
IsInstanceOf
测试对象是否为某个类的实例。
IsSameObject
测试两个引用是否引用同一Java对象。
读&写 Field
GetFieldID
返回类的实例对象的字段ID。该字段由其名称及签名指定。访问器函数的GetField及SetField系列使用域ID检索对象域。 GetFieldID()将未初始化的类初始化。
GetTypeField
SettypeField
调用Method
GetMethodID
返回类或接口实例(非静态)方法的方法ID。方法可在某个clazz的超类中定义,也可从clazz继承。该方法由其名称和签名决定。GetMethodID()可使未初始化的类初始化。要获得构造函数的方法ID,应将作为方法名,同时将void (V)作为返回类型。
CallMethod,CallMethodA,CallMethodV
从本地方法调用Java实例方法。它们的差别仅在于向其所调用的方法传递参数时所用的机制。这三个操作将根据所指定的方法ID 调用Java对象的实例(非静态)方法。参数methodID必须通过调用GetMethodID()来获得。
CallNonvirtualMethod,CallNonvirtualMethodA,CallNonvirtualMethodV例程
根据指定的类和方法ID调用某Java对象的实例(非静态)方法。参数methodID必须通过调用clazz类的 GetMethodID()获得。
CallNonvirtualMethod
和CallMethod
并不相同。CallMethod
根据对象的实例调用方法,而CallNonvirtualMethod
则根据获得方法ID的(由clazz参数指定)类调用方法。方法ID必须从对象的真实类或 其某个超类获得。访问静态字段
GetStaticFieldID
返回类的静态域的域ID。域由其名称和签名指定。GetStaticField和SetStaticField访问器函数系列使用域ID检索静态域。GetStaticFieldID()将未初始化的类初始化。
GetStaticField
SetStaticField
该访问器例程系列设置对象的静态字段的值。要访问的域由通过调用GetStaticFieldID()而得到的域ID指定。
静态方法
GetStaticMethodID
返回类的静态方法的方法ID。方法由其名称和签名指定。GetStaticMethodID()将未初始化的类初始化。
CallStaticMethod,CallStaticMethodA,CallStaticMethodV
这些操作将根据指定的方法ID调用Java对象的静态方法。methodID参数必须通过调用GetStaticMethodID()得到。方法ID必须从clazz派生,而不能从其超类派生。