Jni学习之访问字段

来源:互联网 发布:visual studio写java 编辑:程序博客网 时间:2024/06/03 20:37

Accessing Fields

Java 有两种类型的字段:一种是实例字段,实例字段属于对象,在同一个类的不同对象之间他们是相互独立的互不影响。另一种是静态字段,静态字段属于类,在同一个类的不同对象之间共享静态字段。

JNI提供了访问静态字段和实例字段的方法,下面是一个静态字段和实例字段的例子:

public class JavaClass{    /**实例字段*/    private String instanceField = "Instance Field";    /**静态字段*/    private static String staticField = "Static field";...}


Getting the Field ID

JNI提供了通过字段ID来访问两种类型字段的方法.你可从给定的class对象实例中得到字段的Id.可以通GetObjectClass方法来获得class对象.如下所示:

jclass clazz;clazz = (*env)->GetObjectClass(env, instance);

有两种方法可以从class中获得字段的Id,调用那一种方法取决于字段的类型。

下面是使用GetFieldId方法来获得实例字段的Id的例子:

jfieldID instanceFieldId;instanceFieldId = (*env)->GetFieldID(env,clazz,"instanceField","Ljava/lang/String;");

下面是使用 GetStaticFieldId方法来获得实例字段的Id的例子:

jfieldID staticFieldId;staticFieldId = (*env)->GetStaticFieldID(env, clazz,"staticField", "Ljava/lang/String;");

上边两个函数的最一个参数代表字段在java中的数据类型,在上边的例子中"Ljava/lang/String;"指示这个字段是String类型的。Ljava/lang/String;"中字符L与分号用来说明这是一个引用类型的字段。原生数据类型则不需要添加L和分号。


Getting a Static Field(得到静态字段)

jstring staticField;staticField = (*env)->GetStaticObjectField(env, clazz, staticFieldId);

在内存溢出的情况下,这些方法可能返回NULL,本地代码不应该继续执行。







0 0
原创粉丝点击