一、AllocObject
jobjectAllocObject(JNIEnv *env, jclass clazz);
分配新 Java 对象而不调用该对象的任何构造函数。返回该对象的引用。
clazz 参数务必不要引用数组类。
参数:
env:JNI 接口指针。
clazz
:Java 类对象。
返回值:
返回 Java 对象。如果无法构造该对象,则返回NULL
。
抛出:
InstantiationException:如果该类为一个接口或抽象类。
OutOfMemoryError
:如果系统内存不足。
二、NewObject、NewObjectA、NewObjectV
jobjectNewObject(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);
构造新 Java 对象。方法 ID指示应调用的构造函数方法。该 ID 必须通过调用 GetMethodID()
获得,且调用时的方法名必须为 <init>
,而返回类型必须为 void
(V
)。
clazz
参数务必不要引用数组类。
NewObject
编程人员应将传递给构造函数的所有参数紧跟着放在 methodID
参数的后面。NewObject()
收到这些参数后,将把它们传给编程人员所要调用的 Java 方法。
NewObjectA
编程人员应将传递给构造函数的所有参数放在 jvalues
类型的数组 args
中,该数组紧跟着放在 methodID
参数的后面。NewObject()
收到数组中的这些参数后,将把它们传给编程人员所要调用的 Java 方法。
NewObjectV
编程人员应将传递给构造函数的所有参数放在va_list
类型的参数 args
中,该参数紧跟着放在 methodID
参数的后面。NewObject()
收到这些参数后,将把它们传给编程人员所要调用的 Java 方法。
参数:
env:JNI 接口指针。
clazz
:Java 类对象。
methodID
:构造函数的方法 ID。
NewObject 的其它参数:
传给构造函数的参数。
NewObjectA 的其它参数:
args:传给构造函数的参数数组。
NewObjectV 的其它参数:
args:传给构造函数的参数 va_list。
返回值:
返回 Java 对象,如果无法构造该对象,则返回NULL
。
抛出异常/错误:
InstantiationException:如果该类为接口或抽象类。
OutOfMemoryError
:如果系统内存不足。
三、GetObjectClass
jclassGetObjectClass(JNIEnv *env, jobject obj);
返回对象的类。
参数:
env:JNI 接口指针。
obj
:Java 对象(不能为 NULL
)。
返回值:
返回 Java 类对象。
四、IsInstanceOf
jbooleanIsInstanceOf(JNIEnv *env, jobject obj, jclass clazz);
测试对象是否为某个类的实例。
参数:
env:JNI 接口指针。
obj
:Java 对象。
clazz
:Java 类对象。
返回值:
如果可将 obj
强制转换为 clazz
,则返回 JNI_TRUE
。否则返回 JNI_FALSE
。NULL
对象可强制转换为任何类。
五、IsSameObject
jbooleanIsSameObject(JNIEnv *env, jobject ref1, jobject ref2);
测试两个引用是否引用同一 Java 对象。
参数:
env:JNI 接口指针。
ref1
:Java 对象。
ref2
:Java 对象。
返回值:
如果 ref1
和 ref2
引用同一 Java 对象或均为 NULL
,则返回 JNI_TRUE
。否则返回 JNI_FALSE
。