通常我们也可以直接利用jni来访问和处理类的变量,不一定非要通过Java方法来操作Java类变量。对类变量操作时,类的静态变量和类的实例变量的操作稍微有些不同,下面进行讲解。
类的静态变量属于类,是所有该类实例共享的。操作该变量时,不需要指定具体的实例是哪个。
主要步骤就是代码里面注释的。
代码如下:
JNI开发也有JNI开发的套路,按照上面套路来,即可修改类的实例变量。操作过程也很好理解,我们在native操作的时候都需要借助JNI提供的函数获取相应的引用。利用引用去进行操作。由于JNI函数是直接操作JVM中的数据结构,所以即使是private的变量,我们也可以进行修改。
由于JNI函数是直接操作JVM中的数据结构,不受Java访问修饰符的限制。即,在本地代码中可以调用JNI函数可以访问Java对象中的非public属性和方法
访问和修改静态变量操作步聚:
调用FindClass函数获取类的Class引用
调用GetStaticFieldID函数获取Class引用中某个静态变量ID
调用GetStaticXXXField函数获取静态变量的值,需要传入变量所属Class的引用和变量ID
调用SetStaticXXXField函数设置静态变量的值,需要传入变量所属Class的引用、变量ID和变量的值
访问和修改实例变量操作步聚:
调用GetObjectClass函数获取实例对象的Class引用
调用GetFieldID函数获取Class引用中某个实例变量的ID
调用GetXXXField函数获取变量的值,需要传入实例变量所属对象和变量ID
调用SetXXXField函数修改变量的值,需要传入实例变量所属对象、变量ID和变量的值