JNI访问域,调用java方法

java有两类域:实例域和静态域

JNI提供了访问两类域的函数

带有静态域和实例域的java类

public class JavaClass{
//实例域
private String instanceFiled = "Instance Field";
//静态域
private static String staticField = "Static Field";

}

一获取域ID

JNI提供了用域ID访问两类域的方法,可以通过给定的实例class对象来获取域ID,用GetObjectClass函数来获取class对象

//用对象引用获取类
jclass clazz;
clazz = (*env)->GetObjectClass(env, instance);
//获取实例域的域ID
jfieldID instanceField;
instanceField = (*env)->GetField(env,clazz, "instanceField", "Ljava/lang/String");
//获取静态域的ID
jfieldID staticFieldId;
staticFieldId = (*env)->GetStaticField(env,clazz, "staticField", "Ljava/lang/String");

二,获取域

在获取域ID之后,可以用GetField 函数获得实际的实例域

//获取实例域
jstring instanceField;
instanceField = (*env)->GetObjectField(env, instance, instanceFieldID);
//获取静态域
jstring staticField;
staticField = (*env)->GetStaticObjectField(env,clazz,staticFieldId);
//在内存溢出的情况下,这些函数均返回NULL,原生代码不会继续执行

调用方法

java类

public class JavaClass{
//实例方法
private String instanceMethod(){
  return "instance Methid";
 }
//静态方法
private static String staticMethod(){
 return "Static Method";
 }
}

一获取方法ID

//获取实例方法的ID
jmethod instanceMethodID;
instanceMethodId = (*env)->GetMethod(env, clazz, "instanceMehtod", "()Ljava/lang/String;");
//获取静态方法的ID
jmethodID staticMethodId;
staticMethodId = (*env)->GetStaticMethod(env, clazz, "staticMethod", "()Ljava/lang/String;");

二根据ID调用方法

//调用实例方法
jstring instanceMethodResult;
instanceMethodResult = (*env)->CallStringMethod(env,instacne, instanceMethod);
//调用静态方法
jstring staticMethodResult;
staticMethodResult = (*env)->CallStaticStringMethod(env, clazz, staticMethodId)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值