类签名中的“()V”是什么意思?

2022-09-01 16:35:48

我用Javassist创建了一个构造函数,它没有真正的方法

CtConstructor c = CtNewConstructor.make ( argTypes, null, newClass );

当我试图放出这个类的签名时

c.getSignature();

我得到

public Echo ()V

我很困惑“V”是什么意思?我期望公共Echo();或类似的东西...


答案 1

JVM 使用一种紧凑的方式来存储方法签名,其中构造函数被认为是一种特殊情况。

对于您的示例:

  • ()表示不带参数的方法
  • V表示它不返回任何内容

该方案的其他部分是:

  • B- 字节
  • C- 字符
  • D- 双
  • F- 浮子
  • I- 整型
  • J- 长
  • S- 短
  • V- 无效
  • Z- 布尔值
  • [- 括号后面的事物的数组
  • L[类名] - 此类的实例,点变为斜杠;
  • ([参数] [返回类型] - 方法签名)

例如:

public int foo(String bar, long[][] baz)

会变成

(Ljava/lang/String;[[J)I

请参阅 Sun^H^H^HOracle 网站上的规范


答案 2

“V”确定结果类型“void”


推荐