JNI_Z_04_属性的操作(非String类型的属性)
1、步骤 :
(1)、获取 jclass
(2)、获取 类属性字段的id(最后一个参数是 属性字段 的签名)
(3)、获取/设置 类属性字段的值
ZC: 貌似 JNI里面 操作 类属性字段,完全是 无视 访问权限的... 然而 static的类属性字段,稍有不同,要注意。
2、VC6(CPP)的DLL代码:
#include<stdio.h>
#include "jniZ_TjniField.h" JNIEXPORT void JNICALL Java_jniZ_TjniField_NativeFunc(JNIEnv * env, jobject obj)
{
// 获取obj中对象的class对象
jclass clazz = env->GetObjectClass(obj); // 获取 类属性字段的id(最后一个参数是 属性字段 的签名)
jfieldID fieldidFi = env->GetFieldID(clazz, "Fi", "I"); // public
jfieldID fieldidFj = env->GetFieldID(clazz, "Fj", "I"); // protected
jfieldID fieldidFk = env->GetFieldID(clazz, "Fk", "I"); // private
jfieldID fieldidFm = env->GetStaticFieldID(clazz, "Fm", "I"); // (非public/protected/private)的static // 获取 类属性字段的值
jint i = env->GetIntField(obj, fieldidFi);
jint j = env->GetIntField(obj, fieldidFj);
jint k = env->GetIntField(obj, fieldidFk);
jint m = env->GetStaticIntField(clazz, fieldidFm); printf("i : %d\n", i);
printf("j : %d\n", j);
printf("k : %d\n", k);
printf("m : %d\n", m); // 修改number的值为100,这里要注意的是jint对应C++是long型 ∴后面要加一个"L"
env->SetIntField(obj, fieldidFi, + i);
env->SetIntField(obj, fieldidFj, + j);
env->SetIntField(obj, fieldidFk, + k);
env->SetStaticIntField(clazz, fieldidFm, + m);
}
3、Java代码:
package jniZ; import java.lang.reflect.Field; public class TjniField
{
public int Fi = 0;
protected int Fj = 1;
private int Fk = 2;
static int Fm = 3; public native void NativeFunc(); public static void main(String[] args) throws Exception
{
//调用动态链接库
System.loadLibrary("JniField_VC6");
TjniField jniZ = new TjniField();
jniZ.NativeFunc(); // (1)、i
System.out.println("Java Fi : "+jniZ.Fi);
// (2)、j
Class<?> clazz = jniZ.getClass();
Field fieldJ = clazz.getDeclaredField("Fj");
fieldJ.setAccessible(true);
int j = fieldJ.getInt(jniZ);
System.out.println("Java Fj : "+j);
// (3)、k
Field fieldK = clazz.getDeclaredField("Fk");
fieldK.setAccessible(true);
int k = fieldK.getInt(jniZ);
System.out.println("Java Fk : "+k);
// (4)、m
System.out.println("Java Fm : "+Fm);
}
}
4、Java控制台输出:
Java Fi : 100
Java Fj : 101
Java Fk : 102
Java Fm : 103
i : 0
j : 1
k : 2
m : 3
5、
JNI_Z_04_属性的操作(非String类型的属性)的更多相关文章
- .NET向WebService传值为decimal、double、int、DateTime等非string类型属性时,服务器端接收不到数据的问题
最近在做CRM项目时,使用C#调用SAP PI发布的WebService服务时遇到的问题: 向WebService传值为decimal.double.int.DateTime等非string类型数据时 ...
- String类型的属性和方法
× 目录 [1]属性 [2]对象通用方法 [3]访问字符方法[4]字符串拼接[5]创建子串方法[6]大小写转换[7]查找子串位置[8]正则匹配方法[9]去除首尾空格[10]字符串比较 前面的话 前面已 ...
- SpringMVC中使用@Value给非String类型注入值
String类型的@Value注入方式 String类型的直接可以使用 @Value("陈婉清") private String name; 非String类型的@Value注入方 ...
- 设置实体类型中String类型的属性值为String.Empty
/// <summary> /// 将String类型的属性值设置为String.Empty /// </summary> /// <typeparam name=&qu ...
- C# 通过ServiceStack 操作Redis——String类型的使用及示例
1.引用Nuget包 ServiceStack.Redis 我这里就用别人已经封装好的Reids操作类,来演示,并附上一些说明 RedisConfigInfo--redis配置文件信息 /// < ...
- JNI_Z_05_方法的操作(没有String类型的参数)
1.步骤: (1).获取 jclass (2).获取 method的id (3).调用 method ZC: 貌似 JNI里面 操作 类的方法,完全是 无视 访问权限的... 然而 static的方法 ...
- 编写一个Car类,具有String类型的属性品牌,具有功能drive; 定义其子类Aodi和Benchi,具有属性:价格、型号;具有功能:变速; 定义主类E,在其main方法中分别创建Aodi和Benchi的对象并测试对象的特 性。
package com.hanqi.test; public class Car { //构造一个汽车的属性 private String name; //创建getter和setter方法 publ ...
- 后端日期类属性date 不接受string类型日期,都是没找到解决的方法,所有前端传回的string字符串都一一转化为java定义的类型
1.比如日期 我们可以是yyyy-MM-dd 亦可以是 yyyy-MM-dd HH:mm:ss 方法1在java代码中需要的字段上加上注解 写上日期类型,不过这样很麻烦,每个人写了日期类型的接收前端的 ...
- JNI_Z_07_方法的操作(没有String类型的参数)_参数的传递方式
1. 2.VC6(CPP)的DLL代码: #include<stdio.h> #include "jniZ_TjniMethod02.h" JNIEXPORT void ...
随机推荐
- 关于canvas绘制大转盘并旋转
O(∩_∩)O包子不才,最近磕磕巴巴写了一个大转盘的效果.现在想说一下整个的思路部分,要是有设么不对的还请多多指教,期待共同成为优秀的前端~~大转盘整个思路: 绘制整个转盘 编写一个随机数,用来当接口 ...
- kafka-docker----(how to setup http proxy in container??)
https://github.com/wurstmeister/kafka-docker environment: KAFKA_ADVERTISED_HOST_NAME: 10.10.160.243 ...
- Windows数据库定时备份
首先打开:任务计划程序 右键任务计划程序库,选择创建基本任务 然后即可以按照实际情况逐步进行 直到启动程序--浏览(程序或脚本)时,这里本人导入的是backup.bat文件,文件内容为 @echo 设 ...
- 洛谷 P2331 [SCOI2005]最大子矩阵
洛谷 这一题,乍一眼看上去只想到了最暴力的暴力--大概\(n^4\)吧. 仔细看看数据范围,发现\(1 \leq m \leq 2\),这就好办了,分两类讨论. 我先打了\(m=1\)的情况,拿了30 ...
- Vue(6)- Vue-router进阶、单页面应用(SPA)带来的问题
一.Vue-router进阶 回顾学过的vue-router,并参考官方文档学习嵌套路由等路由相关知识. 二.单页面应用(SPA)带来的问题 1.虽然单页面应用有优点,但是,如果后端不做服务器渲染(h ...
- Python高级教程-Map/Reduce
Python中的map()和reduce() Python内建了map()和reduce()函数. map() map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每 ...
- Windows 7 下 Node.js 连接 Oracle
原创作者: sailtseng 1. 安装 Oracle 11g express 详见: <Windows 7 x64 安装 Oracle 11g Express> 2. 安装 Micr ...
- 解决127.0.0.1 localhost 劫持问题
在一个安装iis的过程中,把网站部署上去之后就发现127.0.0.1或者localhost都会跳转到一个莫名的网站,发现断网之后就是会跳转到一个Http://www.76636.com 类似这种的网站 ...
- oradebug工具使用3(转载)
1 oradebug介绍 oradebug主要是给oracle支持人员使用的,尽管很早便有,但oracle官网很少有记载.他是个sql*plus命令行工具,有sysdba的权限就可以登入,无需特别设置 ...
- go——常量
常量是一个简单值的标识符,在程序运行时,不会被修改的量常量中的数据类型只可以是布尔值.数字型(整数型.浮点型和复数)和字符串.常量的定义格式: const identifier [type] = va ...