zoukankan      html  css  js  c++  java
  • C代码调用Java代码

    • C代码调用Java代码应用场景

      • 复用已经存在的java代码
      • c语言需要给java一些通知
      • c代码不方便实现的逻辑(界面)
    • 反射

      //1.加载类字节码
      Class clazz = Demo.class.getClassLoader().loadClass("com.example.Dialog");
      //2.获取方法
      Method method = clazz.getDeclaredMethod("showDialog",String.class);
      //3.调用方法
      method.invoke(clazz.newInstance(), "德玛西亚");
    • C代码调Java代码步骤

      //1. 加载字节码
      //jclass      (*FindClass)(JNIEnv*, const char*);
      jclass clazz = (*env)->FindClass(env, "cn/loaderman/ccalljava/MainActivity");
      //2. 获取方法id
      //方法签名:唯一确定一个方法  javap -s 包名.类名
      //在bin/class目录中调用命令行
      //jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
      jmethodID methodId = (*env)->GetMethodID(env, clazz, "showDialog", "(Ljava/lang/String;)V");
      //3. 调用方法
      //void        (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
      (*env)->CallVoidMethod(env, thiz, methodId, (*env)->NewStringUTF(env, "德玛西亚,人在塔在"));
      
       
  • 相关阅读:
    LintCode A+B问题
    LintCode 斐波纳契数列
    LintCode 删除链表中的元素
    LintCode 整数排序
    c++ lower_bound upper_bound
    259. 3Sum Smaller
    86. Partition List
    209. Minimum Size Subarray Sum
    11. Container With Most Water
    360. Sort Transformed Array
  • 原文地址:https://www.cnblogs.com/loaderman/p/6440053.html
Copyright © 2011-2022 走看看