java与c之间的参数 方法之间的调用(不错啊 个人总结)

时间:2024.3.31

1:c中返回一个字符串

...................

(*env)->NewStringUTF(env,"zhongguo 中国");

...................

2: c中返回一个数组

.....................

int i = 0;

jintArray array;

array = (*env)->NewIntArray(env,10);

for(;i<10;i++)

{

(*env)->SetObjectArrayElement(env,array,i,i*2);

}

return array;

3:c中使用调用传入的参数是数组 array 是传入的数组

.........

int sum =0, i;

int len = (*env)->GetArrayLength(env,array);

jint *element = (*env)->GetIntArrayElement(env,array,0);

for(i=0;i<len;i++)

{

sum += *(element+i);

}

return sum;

4: c中调用java中类的方法 没有参数 只有返回值String

@" ()Ljava/lang/String;" 表示参数为空 返回值是String类型

JNIEXPORT jstring JNICALL Java_tao_hai_bing_Demo_getCallBack(JNIENV env,jobject object){

jmethodID mid;

jclass cls = (*env)->FindClass(env,"tao/hai/bing/Demo"); //后面是包名+类名

mid =

(*env)->GetMethodID(env,cls,"Callback","()Ljava/lang/String;");//Callback java中的方法名

jstring msg = (*env)->CallObjectMethod(env,object,mid); //object 注意下是jni传过来的jobject

return msg;

}

5: c中调用java中类的静态方法 没有参数 只有返回值String

@" ()Ljava/lang/String;" 表示参数为空 返回值是String类型

JNIEXPORT jstring JNICALL Java_tao_hai_bing_Demo_getCallBack(JNIENV env,jobject object){

jmethodID mid;

jclass cls = (*env)->FindClass(env,"tao/hai/bing/Demo"); //后面是包名+类名

mid = (*env)->GeStatictMethodID(env,cls,"Callback","()Ljava/lang/String;");//Callback java中的方法名

jstring msg = (*env)->CallStaticObjectMethod(env,cls,mid); //object 注意下是jni传过来的jobject

return msg;

}

6: c中调用java中类的方法 二个参数 第一个参数是int 第二个参数是String 返回值是String

@ "(ILjava/lang/String;)Ljava/lang/String" 表示参数是第一个参数是整形 第二个参数是String 返回值是String

JNIEXPORT jstring JNICALL Java_tao_hai_bing_Demo_getCallBack(JNIENV env,jobject object){

jmethodID mid;

jclass cls = (*env)->FindClass(env,"tao/hai/bing/Demo"); //后面是包名+类名

mid = (*env)->GeStatictMethodID(env,cls,"Callback","(ILjava/lang/String;)Ljava/lang/String;");//Callback java中的方法名

jstring param = (*env)->NewStringUTF(env,"taohaibing");

jstring msg = (*env)->CallStaticObjectMethod(env,cls,mid,22,param); //object 注意下是jni传过来的jobject

return msg;

}

8: c中调用java中的全局变量

jclass cls = (*env)->FindClass(env,"tao/hai/bing/Demo");

jfieldID id = (*env)->GetFieldID(env,cls,"num","I"); //num 为java中的变量 I表示这个变量的类型是整形

jint param = (*env)->GetIntField(env,object,id);

jfieldID id2 = (*env)->GetFieldID(env,cls,"num2","Ljava/lang/String"); //num2 为java中的变量 I表示这个变量的类型是String

jstring param = (*env)->GetObjectField(env,object,id);

8: c中调用java中的静态的变量

jclass cls = (*env)->FindClass(env,"tao/hai/bing/Demo");

jfieldID id = (*env)->GetStaticFieldID(env,cls,"num","Ljava/lang/String"); //num 为java中的变量 I表示这个变量的类型是整形

jstring param = (*env)->GeStaticObjectField(env,cls,id);


第二篇:java中方法中参数的传递


方法中参数的传递

Java语言中参数的传递按值传递和应用传递调用方法。

参数传递的方法

对于简单的数据类型来说。Java实现的是值得传递,方法接收参数的值但不改变参数的值。如果要改变参数的值,则需应用数据类型,因为引用类型传递给该方法的是数据在内存中的地址,方法中数据的操作可以改变数据的值。 Eg:简单的数据类型与引用数据类型的区别

class SimpleRefType{

float value;

public void changInt(int value){//修改值参数的方法

value=34;

}

public void changeRef(SimpleRefType tt)

{//修改引用参数的方法

tt.value=45.6f;

}

}

public class Test_SimpleRef

{

public static void main(String[]args) {

int val;

val=33;

System.out.println("val 的初始值为:"+val); SimpleRefType tt=new SimpleRefType(); //创建SimpleRefType对象

tt. changInt(val);

//修改值参数的调用

//值参数值的修改,没有影响值参的值

System.out.println("调用方法changInt()后val的初始值为:"+val);

//引用参数val的调用

tt.value=12.6f;

System.out.println("类的成员value的初始值为:"+tt.value);

tt.changeRef(tt);//引用类型的参数方法调用 //引用参数值的修改,改变了引用参数的值 System.out.println("引用方法changeRef()调用后value的值:"+tt.value);

}

}

在主类Test_SimpleRef中声明SimpleRefType的对象tt,调用类中的方法

changInt(value),修改类中的属性value的值,但方法调用后,有主程序传递的实参val的值并没有改变,这说明了对于简单数据类型val来说,java实现的是值的传递,方法接受参数的值,但不可以改变参数的值。 但调用类中的方法tt.changeRef(tt),修改类中属性value的值,但当方法调用后,有主程序传递

命令行参数的使用

Main方法是一个重要而特别的方法。它是java应用程序的入口,JVM在字节码运行时,完成初始化后,就会寻找main()方法,从这里开始整个程序的运行,在main()方法的括号里,有一个形式参数,“Stringargs[]”,arg[]是一个字符串的数组,可

以接收系统所传递的参数,而这些参数这来之用户的输入,即在运行程序的过程中将用户输入的参数传递给一个程序。

更多相关推荐:
java各知识点详细总结

Java基础知识总结写代码1明确需求我要做什么2分析思路我要怎么做1233确定步骤每一个思路部分用到哪些语句方法和对象4代码实现用具体的java语言代码把思路体现出来学习新技术的四点1该技术是什么2该技术有什么...

Java详细总结(精辟版++)

Java总结开始于20xx97092748Java概述Java分类javaSE主要是桌面程序控制台程序开发是java基础javaEE企业级开发网站开发和基于bs模式的编程javaME嵌入式开发手机软件小家电第一...

高手总结java常用API(免费下载)

Java常用API的运用效率及技巧1Java面向对象基本概念2System3StringStringBuffer4数值字符布尔对象与简单类型的操作5ClassClassLoader6JavaIO系统7Java集...

java基础知识总结(超级经典)1

Java基础知识总结写代码1明确需求我要做什么2分析思路我要怎么做1233确定步骤每一个思路部分用到哪些语句方法和对象4代码实现用具体的java语言代码把思路体现出来学习新技术的四点1该技术是什么2该技术有什么...

java知识点总结

Java程序设计基础知识点总结1类首字母大写如果一个类名由多个单词构成那么每个单词的首字母都大写中间不使用任何的连接符比如Person类MemberTest类2方法首字母小写如果一个方法由多个单词构成那么第一个...

Java个人总结(仅供参考)

第一章(1)了解J2SE、J2EE、J2ME?J2SE(Java2StandardEdition):标准版?主要目的是为台式机和工作站提供一个开发和运行的平台。包括标准的Java2SDK、工具、运行时环境和AP…

java基础知识总结(超级经典)

Java基础知识总结超级经典写代码1明确需求我要做什么2分析思路我要怎么做1233确定步骤每一个思路部分用到哪些语句方法和对象4代码实现用具体的java语言代码把思路体现出来学习新技术的四点1该技术是什么2该技...

Java常用类总结

Java常用类总结1Java基本类型的封装类Java的8大基本类型有intlongshortfloatdoublebooleancharbyte对应的封装类是IntegerLongShortFloatDoubl...

java面向对象总结(绝对经典)

主要内容学习方法介绍面向对象思想介绍类与对象关系封装概念1学习方法介绍四问法什么有什么特点怎么用demo什么时候用test2面向对象与面向过程的区别面向过程强调的是功能和行为面向对象强调的是具有某种功能的对象即...

毕向东java基础总结(完整版)

克己宽容仁德博学厚黑坚毅稳重Java基础知识总结168克己宽容仁德博学厚黑坚毅稳重Java基础知识总结超级经典写代码1明确需求我要做什么2分析思路我要怎么做1233确定步骤每一个思路部分用到哪些语句方法和对象4...

java面向对象总结

面向对象面向对象是一种思想能让复杂的问题简单化让我们角色从执行者变成指挥者不要知道过程只要知道结果一切皆对象描述一个事物其实就是在描述事物的属性和行为对象的特点在于封装数据数据包含着属性和行为我们用类来描述一个...

Java关键字总结

Java关键字总结21abstractJava关键字abstract关键字可以修改类或方法abstract类可以扩展增加子类但不能直接实例化abstract方法不在声明它的类中实现但必须在某个子类中重写示例pu...

java 总结(38篇)