四、Jni开发:C语言访问JAVA构造方法、父类方法

这篇文章主要介绍了C语言访问JAVA的构造方法、父类方法。

访问构造方法

例子://使用java.util.Date产生一个当前的时间戳

java代码:

    //方法声明
public native Date accessConstructor();

然后在main方法中调用

C代码:
//访问构造方法

    JNIEXPORT jobject JNICALL Java_JniTest_accessConstructor
    (JNIEnv *env, jobject jobj) {
        jclass cls = (*env)->FindClass(env, "java/util/Date");
        //jmethodID
        jmethodID constructor_mid = (*env)->GetMethodID(env, cls, "<init>", "()V");
        //实例化一个Date对象
        jobject date_obj = (*env)->NewObject(env, cls, constructor_mid);
        //调用getTime方法
        jmethodID mid = (*env)->GetMethodID(env, cls, "getTime", "()J");
        jlong time = (*env)->CallLongMethod(env, date_obj, mid);

        printf("\ntime:%lld\n", time);

        return date_obj;
    }
执行结果

访问父类方法

首先新建两个类,Human和Man

Human:

public class Human {
    public void sayHi(){
        System.out.println("人类说你好!!");
    }   
}

Man:

public class Man extends Human{
  @Override
  public void sayHi() {
    System.out.println("男人说你好!!");
  }

  public void sayHi2(){
    super.sayHi();
  }
}

在调用类中创建一个Human类,并用子类来实例化。

public Human human = new Man();

C代码:

//调用父类方法
    JNIEXPORT void JNICALL Java_JniTest_accessNonvirtualMethod
    (JNIEnv *env, jobject jobj) {
        jclass cls = (*env)->GetObjectClass(env, jobj);
        //获取man属性(对象)
        jfieldID fid = (*env)->GetFieldID(env, cls, "human", "LHuman;");
        //获取
        jobject human_obj = (*env)->GetObjectField(env, jobj, fid);

        //执行sayHi方法
        jclass human_cls = (*env)->FindClass(env, "Human"); //注意:传父类的名称
        jmethodID mid = (*env)->GetMethodID(env, human_cls, "sayHi", "()V");

        //执行
        (*env)->CallObjectMethod(env, human_obj, mid);
        //调用的父类的方法
        (*env)->CallNonvirtualObjectMethod(env, human_obj, human_cls, mid);
    }
运行结果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,730评论 0 11
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,253评论 19 139
  • 1、Servlet接口实现类: SUN公司定义了两个默认实现类,分别为:GenericServlet、Http...
    咕咕咕咕咕基阅读 602评论 0 0
  • NPM? Install Node & NPM Node Version Control n / nvm / nv...
    前端黑板报阅读 508评论 0 0