• Jni GetMethodID中函数标识sig的详细解释


    在 JNI(Java Native Interface)中,GetMethodID 函数用于获取 Java 类的方法的标识符。这个函数的详细解释如下:

    cCopy code
    jmethodID GetMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig);

    参数说明:

    • env: JNI 环境指针,用于与 Java 运行时交互。
    • clazz: 要查找方法的 Java 类的类引用(jclass)。
    • name: 要查找的方法的名称,以 C 字符串表示。
    • sig: 要查找的方法的签名(Signature),以 C 字符串表示。

    返回值:

    • 成功时,返回对应方法的 jmethodID,用于后续的 JNI 调用。
    • 失败时,返回 NULL,表示没有找到对应的方法。

    方法名称和签名是确定一个 Java 方法的两个关键要素:

    • 方法名称(name): 与 Java 方法的名称相对应。例如,对于 Java 中的方法 public int add(int a, int b),其方法名称就是 "add"
    • 方法签名(signature,sig): 表示 Java 方法的返回值类型和参数类型。方法签名的构成包括返回值类型和每个参数的类型。例如,int add(int a, int b) 的方法签名就是 "(II)I",其中 (II) 表示两个整数类型的参数,而 (I) 则表示一个整数类型的返回值。

    GetMethodID 函数根据传入的类引用、方法名称和方法签名,在指定的类中查找匹配的方法。如果找到了对应的方法,函数会返回该方法的 jmethodID,以便在 JNI 调用中使用。如果找不到匹配的方法,函数会返回 NULL

    需要注意的是,方法签名的构成是遵循 Java 的规则的,具体规则可以参考 Java 的文档或相关资料。在使用 GetMethodID 函数时,确保方法名称和签名的正确性,以便正确获取并调用 Java 方法。

    在 JNI 中,方法签名(Signature)用于描述方法的返回值类型和参数类型。方法签名的构成遵循一定的规则,下面是一些常见的方法签名的写法示例:

    1. 基本数据类型:
      • I: 整数类型(int)
      • J: 长整数类型(long)
      • D: 双精度浮点数类型(double)
      • F: 单精度浮点数类型(float)
      • Z: 布尔类型(boolean)
      • C: 字符类型(char)
      • B: 字节类型(byte)
      • S: 短整数类型(short)
    2. 引用类型:
      • Ljava/lang/Object;: 表示 Object 类型的引用
      • Ljava/lang/String;: 表示 String 类型的引用
      • L包名/类名;: 表示特定包名和类名的引用
    3. 数组类型:
      • [I: 表示整数类型的一维数组
      • [Ljava/lang/String;: 表示 String 类型的一维数组
      • [[D: 表示双精度浮点数类型的二维数组
    4. 方法类型:
      • (参数类型1参数类型2...)返回值类型: 例如,(II)I 表示接受两个整数参数,返回一个整数。

    下面是一些方法签名的具体示例:

    • int add(int a, int b): (II)I
    • String concat(String str1, String str2): (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
    • void printMessage(String message): (Ljava/lang/String;)V
    • boolean isValid(int number): (I)Z

    当你需要在 JNI 中使用 GetMethodID 或其他 JNI 函数时,需要根据 Java 方法的返回值类型和参数类型构造正确的方法签名。如果方法存在于一个特定的类中,还需要考虑包名和类名的表示方式。确保方法签名的正确性是确保 JNI 调用正确执行的关键。

  • 相关阅读:
    Vue——属性监听器(面试)、自定义指令(面试)
    Linux下进度条程序实现以及自动化构建工具makefile的实现和对回车键的理解
    语言模型:GPT与HuggingFace的应用
    Exception in thread “main“ java.io.NotSerializableException:
    WPF实现超简约的MVVM事件绑定(不依赖任何东西)
    计算机竞赛 基于深度学习的人脸识别系统
    java毕业设计网上商城系统mybatis+源码+调试部署+系统+数据库+lw
    每日三题 8.22
    CSAPP Bomb Lab
    dos batch转义&
  • 原文地址:https://www.cnblogs.com/jonil/p/17642525.html