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[]是一个字符串的数组,可
以接收系统所传递的参数,而这些参数这来之用户的输入,即在运行程序的过程中将用户输入的参数传递给一个程序。