“()V”在class级签名中的含义是什么?

我用Javassist创建了一个没有实际方法的构造函数

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

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

 c.getSignature(); 

我明白了

 public Echo ()V 

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

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

对于你的例子:

  • ()表示不带参数的方法
  • V表示它什么都不返回

该计划的其他部分是:

  • B字节
  • C – char
  • D – 双倍
  • F – 浮动
  • I – int
  • J – 长
  • S – 短
  • V – 无效
  • Z – 布尔值
  • [ – 括号之后的东西的数组
  • L [class级名称] ; – 此类的实例,点变为斜杠
  • ( [args] ) [返回类型] – 方法签名

例如:

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

会成为

 (Ljava /郎/字符串; [[J)我

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

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

类型签名中的V表示空类型。 字节码不区分构造函数与其他方法(除了使用特殊方法名称)。