学习android JNI的那些事儿--------7. 在JNI中创建java类对象

本文详细介绍了如何在JNI中通过调用Java类的构造函数创建类对象,并通过实例展示了如何给对象成员变量赋值及打印日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前我们介绍过在jni中调用java中的成员函数,这里我们来介绍下载jni中创建java中的类对象,其实跟之前一样就是调用java类中的构造函数。

我们在之前的例子的前提下修改一个带参数的构造函数,然后再main activety中使用native code去new一个class对象,在jni中调用构造函数传入参数去给类的成员变量赋值,最后打印出log。

-------------------------------------------------------------

先看下构造函数:

public class Student {
	private String name;
	private int number;
	Student(int num, String string){
		name = string;
		number = num;
	}

在按下button的时候新建一个class 对象:

		public void onClick(View v) {
			if(v.getId() == R.id.button1 ){
//				accessInstanceMethod("Instance Method Call");
//				student=doWithObj(student);
//				tv.setText("name:"+student.getName()+", number:"+student.getNumber());
				Student student = createObj();
				System.out.println( "name: "+student.getName()+", number: "+student.getNumber());
			}

最后看下在jni中是如何做的:

jobject
Java_com_android_jni_MyJNI_createObj(JNIEnv *env,jobject jobj)
{
	jobject student = NULL;
	jclass student_cls = (*env)->FindClass(env,
			"com/android/jni/Student");
	if(student_cls == NULL)
		return NULL; //can not find class Studnet
	jmethodID student_mtd = (*env)->GetMethodID(env,student_cls,"<init>",
			"(ILjava/lang/String;)V");
	if(student_mtd == NULL)
		return NULL;
	jstring jstr = (*env)->NewStringUTF(env,"[Jay]");
	student = (*env)->NewObject(env,student_cls,student_mtd,10,jstr);
	(*env)->DeleteLocalRef(env,jstr);
	return student;
}

很简单,就是调用了NewObect来新建一个对象,之前需要FindClass,然后得到构造函数的methodID。

之后运行模拟器,使用logcat查看打印出来的消息。

----------------------------------------------------------------------------------

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值