访问静态域¶
访问静态域和访问非静态域类似。你要使用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++访问类的静态属性。
本站说明
一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。如有疑问和建议,欢迎在下方评论~