首页 > 其他分享 >Jni GetMethodID中函数标识sig的详细解释

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

时间:2023-08-19 22:12:56浏览次数:34  
标签:Java String int sig 签名 类型 Jni GetMethodID 方法

在 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 调用正确执行的关键。

标签:Java,String,int,sig,签名,类型,Jni,GetMethodID,方法
From: https://www.cnblogs.com/jonil/p/17642525.html

相关文章

  • [超详细] GraalVM打包含有JNI的本地镜像
    GraalVM是一种高性能、多语言通用虚拟机和编译器技术。它由Oracle开发并开源,旨在为不同的编程语言和应用场景提供统一的运行时环境和编译器平台。以下是GraalVM的一些主要特点和功能:多语言支持:GraalVM支持多种编程语言,包括Java、JavaScript(Node.js)、Python、Ruby、R、C......
  • 让SignalR客户端回调支持强类型
    几天写一个小程序的时候用到了SignalR,发现现在SingalRServer支持强类型了,也就是说,我们可以定义一个客户端的通知契约:    public interface IClient    {        void SayHello(string message);    }然后Hub就可以这么写了:    public class Me......
  • SignalR 客户端源生成器 客户端强类型方法
     SignalR客户端源生成器根据您定义的接口生成强类型的发送和接收代码。您可以在客户端上重用来自强类型SignalR集线器的相同接口来代替松散类型的.On("methodName",...)方法。同样,您的集线器可以为其方法实现一个接口,并且客户端可以使用该相同接口来调用集线器方法。要使......
  • SDL 线程创建(SDL_LockMutex / SDL_UnlockMutex、SDL_CondWait / SDL_CondSignal)
     SDL_mutex*s_lock=NULL;SDL_cond*s_cond=NULL;intthread_work(void*arg){ SDL_LockMutex(s_lock); printf("[thread_work]in.\n"); Sleep(5000); printf("[thread_work]好了,知道了,我刚刚去玩了5秒,我直接SDL_CondWait把锁给你我自己睡觉去了。你拿到锁......
  • Two-round n-out-of-n and Multi-Signatures and Trapdoor Commitment from Lattices
    Abstract.Althoughtheyhavebeenstudiedforalongtime,distributedsignatureprotocolshavegarneredrenewedinterestinrecentyearsinviewofnovelapplicationstotopicslikeblockchains.MostrecentworkshavefocusedondistributedversionsofE......
  • 如何用Apipost实现sign签名?
    我们平常对外的接口都会用到sign签名,对不同的用户提供不同的apikey,这样可以提高接口请求的安全性,避免被人抓包后乱请求。如何用Apipost实现sign签名?可以在Apipost中通过预执行脚本调用内置的JS库去实现预执行脚本是在发送请求之前自动执行的JavaScript代码sign签名生成分为如下几......
  • 如何用Apipost实现sign签名?
    我们平常对外的接口都会用到sign签名,对不同的用户提供不同的apikey,这样可以提高接口请求的安全性,避免被人抓包后乱请求。如何用Apipost实现sign签名?可以在Apipost中通过预执行脚本调用内置的JS库去实现预执行脚本是在发送请求之前自动执行的JavaScript代码sign签名生成分为如......
  • Two-round n-out-of-n and Multi-Signatures and Trapdoor Commitment from Lattices
    Abstract.Althoughtheyhavebeenstudiedforalongtime,distributedsignatureprotocolshavegarneredrenewedinterestinrecentyearsinviewofnovelapplicationstotopicslikeblockchains.MostrecentworkshavefocusedondistributedversionsofE......
  • Ant Design Pro项目Popover位置微调
    前情公司有经常需要做一些后台管理页面,我们选择了AntDesignPro,它是基于AntDesign和umi的封装的一整套企业级中后台前端/设计解决方案。产品效果图最新接到的一个后台管理界面需求,需要使用到Popover,但是在使用时发现那箭头位置不符合预期:理想:实际:解决方案从官网......
  • inclusive design patterns All In One
    inclusivedesignpatternsAllInOne包容性设计模式TableOfContentsIntroduction08TheDocument20AParagraph46ABlogPost70EvaluationByPattern108NavigationRegions124AMenuButton154InclusivePrototyping180AListOfProducts190AFil......