当前位置: 首页 > news >正文

黑色炫酷灯饰照明科技企业商务网站模板/seo查询官网

黑色炫酷灯饰照明科技企业商务网站模板,seo查询官网,网站开发公司经营范围,个人商城网站建设Java有两类域,实例域和静态域。类的每个实例都有自己的实例域副本,而一个类的所有实例共享一个静态域(Java SE基础)。 JNI提供了相应的函数来访问这两类域,总体步骤是这样的: 1.通过对象引用获得类 2.通过类…

Java有两类域,实例域和静态域。类的每个实例都有自己的实例域副本,而一个类的所有实例共享一个静态域(Java SE基础)。

JNI提供了相应的函数来访问这两类域,总体步骤是这样的:


1.通过对象引用获得类
2.通过类获得域ID
3.通过域ID获取域


下面我们按步骤一步一步来:
我们的Java类中有两个域,一个静态域,一个实例域:

    private static String staticFiled = "a static Filed465";private String instanceFiled = "a instance Filed123";

访问该域的三个步骤:

1通过对象引用获得类

jclass clazz;//定义域IDjfieldID instanceFieldId;jfieldID staticFieldId;//定义域jstring instanceFieldStr;jstring staticFieldStr;//通过对象引用获得类clazz = (*env)->GetObjectClass(env, thiz);

2通过类获得域ID

//通过类获得域IDinstanceFieldId = (*env)->GetFieldID(env,clazz,"instanceFiled","Ljava/lang/String;");staticFieldId = (*env)->GetStaticFieldID(env,clazz,"staticFiled","Ljava/lang/String;");

这里两个函数的最后一个参数是Java中表示域类型的域描述符,"Ljava/lang/String;"表明域类型是String。
一般情况下,为了提高应用程序的性能,我们可以缓存域ID,一般总是缓存使用最频繁的域ID

3.通过域ID获取域

    //通过域ID获得域instanceFieldStr = (*env)->GetObjectField(env,thiz,instanceFieldId);staticFieldStr = (*env)->GetStaticObjectField(env,clazz,staticFieldId);

为了证明我们已经成功获得域,我们把jstring转为c字符串之后然后打印出来(打印日志请看NDK开发之日志打印):

    const jbyte* str1;const jbyte* str2;str1 = (*env)->GetStringUTFChars(env,instanceFieldStr,0);str2 = (*env)->GetStringUTFChars(env,staticFieldStr,0);LOGI("the string is :%s",str1);LOGI("the string is :%s",str2);

打印结果:

这里写图片描述


完整的程序是这样的:


void Java_com_example_jni_MainActivity_updateField(JNIEnv* env, jobject thiz) {jclass clazz;//定义域IDjfieldID instanceFieldId;jfieldID staticFieldId;//定义域jstring instanceFieldStr;jstring staticFieldStr;//通过对象引用获得类clazz = (*env)->GetObjectClass(env, thiz);//通过类获得域IDinstanceFieldId = (*env)->GetFieldID(env,clazz,"instanceFiled","Ljava/lang/String;");staticFieldId = (*env)->GetStaticFieldID(env,clazz,"staticFiled","Ljava/lang/String;");//通过域ID获得域instanceFieldStr = (*env)->GetObjectField(env,thiz,instanceFieldId);staticFieldStr = (*env)->GetStaticObjectField(env,clazz,staticFieldId);//jstring转为C字符串然后打印出来const jbyte* str1;const jbyte* str2;str1 = (*env)->GetStringUTFChars(env,instanceFieldStr,0);str2 = (*env)->GetStringUTFChars(env,staticFieldStr,0);LOGI("the string is :%s",str1);LOGI("the string is :%s",str2);
}

总结

大家都看到了,获得单个域需要三个步骤,这真是太麻烦了,经常这样搞会影响程序的性能,因此建议如果在原生方法中需要 使用域,这些域最好作为参数传递给原生方法,而不要让原生代码回到Java中。


转载于:https://www.cnblogs.com/qitian1/p/6461751.html

http://www.jmfq.cn/news/5245903.html

相关文章:

  • 政府网站与门户网站的区别/seo的优化技巧和方法
  • 可以做微商的网站/网络促销方案
  • 做网站用什么web服务器吗/seo推广营销公司
  • 建设课程网站的目的/张家界百度seo
  • 阿里巴巴电子商务网站建设目的/b站视频推广app
  • 怎么选择网站开发/优化网站建设seo
  • 一般做网站用什么软件/推广普通话的重要意义
  • 教育网站模板/网上兼职外宣推广怎么做
  • 网站颜色正确搭配实例/达内教育
  • 普通网站和营销型网站的区别是什么/邀请注册推广赚钱
  • app导航网站源码/求几个微信推广平台
  • 电脑iis做网站/新闻平台发布
  • 9元建站节/成都网络推广哪家好
  • 专业集团门户网站建设公司/促销活动推广语言
  • 网站建设经典语录/百度开车关键词
  • 如何确定网站被k/上海seo关键词优化
  • 灯饰模板网站/东莞网站制作公司
  • 重庆建一科技发展有限公司/西安网站seo推广
  • 企业营销网站建设费用预算/网站建设方案及报价
  • 网站的开发流程分哪几步/百度推广服务
  • CMS源码就可以做网站吗/电脑培训学校哪家好
  • 网站设计遇到的问题/石家庄seo公司
  • 移动端网站和app区别/英文seo
  • 长春优化/seo流量增长策略
  • 冒用公司名义做网站/外贸建站推广公司
  • 阳江网站建设公司/平台网站开发公司
  • 上海简约网站建设公司/抖音seo软件
  • 武汉google网站制作/ks免费刷粉网站推广
  • 建新网站开发流程图/做一个公司网站需要多少钱
  • wordpress分享计数/绍兴seo