访问静态域¶
访问静态域和访问非静态域类似。你要使用GetStaticFieldID
和GetStaticXxxField
/SetStaticXxxField
函数。
它们几乎与非静态的情形一样。
示例¶
假设我们有一个FisherTom
类。我们想要访问的静态变量是staticNumber1
。
public class FisherTom {
private static int staticNumber1 = 200;
static {
System.loadLibrary("fisher-pole");
}
public native int nVisitStaticNumber1();
public static native int nVisitStaticNumber2();
}
nVisitStaticNumber1()
和nVisitStaticNumber2()
。后者是静态本地方法。
对应的cpp实现代码分别如下:
nVisitStaticNumber1()
的对应方法
extern "C"
JNIEXPORT jint JNICALL
Java_com_rustfisher_fishpole_worker_FisherTom_nVisitStaticNumber1(JNIEnv *env, jobject thiz) {
jclass cls = env->GetObjectClass(thiz);
jfieldID n_fid = env->GetStaticFieldID(cls, "staticNumber1", "I");
jint n1 = env->GetStaticIntField(cls, n_fid);
return n1;
}
nVisitStaticNumber2()
的对应方法。
extern "C"
JNIEXPORT jint JNICALL
Java_com_rustfisher_fishpole_worker_FisherTom_nVisitStaticNumber2(JNIEnv *env, jclass clazz) {
jfieldID n_fid = env->GetStaticFieldID(clazz, "staticNumber1", "I");
jint n1 = env->GetStaticIntField(clazz, n_fid);
return n1;
}
从上面2个方法可以看出,静态本地(static native)方法对应的cpp方法中,参数是jclass
。
而nVisitStaticNumber1()
的对应方法参数里是jobject
。需要使用GetObjectClass
来获得对应的jclass
。
两个方法在访问静态变量时,都调用GetStaticFieldID
方法。
通过以上例子,我们了解如何用C++访问类的静态属性。
作者: rustfisher.com | rf.cs@foxmail.com
示例: AndroidTutorial Gitee, Tutorial Github
本文链接: https://www.an.rustfisher.com/android/ndk/field-use/static-field-use/
一家之言,仅当抛砖引玉。如有错漏,还请指出。如果喜欢本站的内容,还请支持作者。也可点击1次下方的链接(链接内容与本站无关),谢谢支持服务器。
如有疑问,请与我联系:Android issues - gitee