Java有两种类型的属性:实例属性和静态属性。每一个类的实例拥有它自己实例域的拷贝,然而一个的很多实例拥有同样的静态属性。
这个JNI提供函数获得两种属性类型。
public class JavaClass {
/** Instance field */
private String instanceField = "Instance Field";
/** Static field */
private static String staticField = "Static Field";
...
}
获得属性的ID
这jNI通过属性ID来获得属性。你能够获得属性ID通过这个类的对象对于给定的实例。类的对象获得通过GetObjectClass函数。
jclass clazz;
clazz = (*env)->GetObjectClass(env, instance);
依据属性的类型提供两个方法来属性的ID。GetFiledId来获得实例ID。
,jfieldID instanceFieldId;
instanceFieldId = (*env)->GetFieldID(env, clazz,
"instanceField", "Ljava/lang/String;");
由GetStaticFiledId来获得静态的ID。如下:
jfieldID staticFieldId;
staticFieldId = (*env)->GetStaticFieldID(env, clazz,
"staticField", "Ljava/lang/String;");
两个函数的最后的参数表上Java的类型。
获得静态的属性值,jstring staticField;
staticField = (*env)->GetStaticObjectField(env, clazz, staticFieldId);