gpt4 book ai didi

java - JVM类型签名的方法类型是什么

转载 作者:行者123 更新时间:2023-11-30 02:01:48 24 4
gpt4 key购买 nike

根据JVM Specification ,JVM 有 11 种类型签名,其中之一是“方法类型”,我从未见过。它是什么 ?

最佳答案

正如 Holger 指出的那样,您链接到的文档适用于 Java native 接口(interface) (JNI),而不是 JVM 规范。

JNI 使用方法签名来确定(更准确地说解析)要使用哪个方法。正如文档所指出的,这与 JVM 使用的方法相同。

方法签名允许唯一地标识方法。 Java 语言有方法重载的概念,这意味着一个类中可以有多个同名的方法。编译器通过方法签名来区分它们,方法签名由方法名称、泛型类型参数(如果有)及其参数的数量和类型组成。重要的是要理解只有这些值用于签名。没有考虑该方法定义的其他几个方面:

  • 返回类型
  • 抛出异常
  • 这是静态方法还是实例方法
  • 访问修饰符(公共(public)、包、 protected 、私有(private))

这意味着即使返回类型不同或抛出不同的异常,也不能拥有两个具有相同名称和相同参数数量和类型的方法。 (有关更多详细信息,请参阅 Java 语言规范第 8.4.2 节)。

但是,在 JVM 内部,方法签名确实包含返回类型(有关更多详细信息,请参阅 Java 虚拟机规范的 4.3.3 节)。

在 JNI 中,方法签名是使用链接到的页面上的语法定义的。

让我们使用该页面上的示例方法:

long f (int n, String s, int[] arr) { ... }

它的 JVM 表示是

(ILjava/lang/String;[I)J 

要在 JNI 中使用它,我们可能有这样的东西:

jclass cls = (*env)->GetObjectClass(env, obj);
jmethodID mid = (*env)->GetMethodID(env, cls, "f", "(ILjava/lang/String;[I)J");

如您所见,我们将方法类型签名作为参数传递给 GetMethodID 方法,以便 JNI(和 JVM)可以解析返回哪个方法的标识。

关于java - JVM类型签名的方法类型是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52610745/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com