JNI学习笔记3——本地方法取得Java属性/调用java方法
来源:互联网 发布:软件运维是运维开发吗? 编辑:程序博客网 时间:2024/05/16 16:17
(一)取得Java属性/设定Java属性值
1.取得相应属性的jfieldID之后就可以用
Set<TYPE>Field();
Get<TYPE>Field();
SetStatic<TYPE>Field();
GetStatic<TYPE>Field();
等函数对java属性进行操作b C++源码部分:
2.获取数组属性——>GetObjectField
3.例子:
a java 代码部分:
b C++源码部分
(二)Java方法的调用
1.取得相应的jmethodID传入函数的参数中,就可以用
Call<TYPE>Method();
CallStatic<TYPE>Method();
CallNonvittual<TYPE>Method();
等函数对java函数进行调用
2.调用形式
java中方法:
boolean function(int i , bouble d , char c){
···
}
//env->CallBooleanMethod(obj , id_function, 100L, 3.44 , L'3');//第一种调用函数形式
//第二种调用形式
jvalue * args = new jvalue[3];//存储参数的数组
args[0].i=100L;
args[1].d=3.44;
args[2].c=L'3';
env->CallBooleanMethod(obj , id_function , args);
delete [] args;//删除内存
3.调用例子
a java代码部分
b C++源码部分
3.CallNonvirtual<TYPE>Method
如下java代码:
第一段
public class Father{
public void function(){
System.out.println("Father:func");
}
}
第二段
public class Child extends Father{
public void function(){
System.out.println("Child:func");
}
}
问题:如果出现以下代码,问其是调用哪个方法?
Father p = new Child();
p.function();
如下C++代码:
第一段
class Father{
public:
virtual void function(){//若加上virtual又如何
cout<<"Father:func"<<endl;
}
}
第二段
class Child: public Father
public: void function(){
cout<<"Child:func"<<endl;
}
}
问题:如果出现以下代码,问其是调用哪个成员函数?
Father* p = new Child();
p->function();
在JNI中定义的CallNonvirtual<TYPE>Method就能够对子类对象调
用父类方法的功能。如果想要调用一个对象的父类方法,而不是子类
的这个方法的话,就可以使用CallNonvirtual<TYPE>Method
使用方式:
首先取得父类及要调用的父类方法的jmethodID
然后传入到这个函数就能通过子类对象呼叫被覆写(override)的父
类的方法
使用实例
(1)新增Father类
(2)新增Child类
(3)java代码部分
(4)C++源码部分
- JNI学习笔记3——本地方法取得Java属性/调用java方法
- JNI学习笔记:(1)开篇(2)本地代码访问Java代码 (3)本地方法取得Java属性/调用java方法 (4)本地代码创建Java对象(包括javaString) (5) 本地方法处理java数组
- 本地方法取得Java属性/调用java方法
- 本地方法(JNI)——调用 java 方法
- JNI-java本地调用方法学习第一天
- jni JAVA调用本地步骤、方法
- java 调用本地C/C++方法:jni
- Java-----使用JNI调用本地方法
- java JNI本地方法调用的使用
- JNI学习笔记(三)JNI中本地语言访问Java类中的属性与方法(附例子)
- JNI学习(三)、JNI本地方法访问Java端的属性和方法
- JNI学习笔记5——本地方法处理java数组/引用问题/缓存jfieldID/jmethodID
- java学习之JNI学习二 取得属性和方法的ID
- Android NDK学习笔记9-JNI调用Java方法
- JNI笔记 C访问java属性方法
- JNI调用Java方法
- JNI调用Java方法
- JNI调用Java方法
- Oracle ORA-01122,ORA-01110,ORA-01203错误解决方法!
- linux 版本介绍
- 关于linux下面挂载Windows硬盘,但是无法在Windows下看到数据
- 汇编语言作图
- HDU1880 字符串hash
- JNI学习笔记3——本地方法取得Java属性/调用java方法
- RedHat 4 RAC 安装crs的一个小问题
- 360揭底文,怎么会有人挺360?腾讯虽然不会办事。。。但怎么也不下流无耻啊。
- c# Flash交互
- 【轻松学】使用VC++编写DLL:导出类-使用导出类(二)
- BW:DTP过滤器的例程
- 深刻理解Java中的堆和栈
- Remoting学习
- BlackBerry 应用程序开发者指南 第二卷:高级--第7章 与BlackBerry应用程序通信