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

时间:2012-03-28 14:07:09

标签: java bytecode javassist

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

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

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

c.getSignature();

我得到了

public Echo ()V

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

3 个答案:

答案 0 :(得分:44)

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

对于你的例子:

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

该计划的其他部分是:

  • B - byte
  • C - char
  • D - 双
  • F - float
  • I - int
  • J - 很长
  • S - 简短
  • V - void
  • Z - 布尔
  • [ - 括号
  • 之后的数组
  • L [班级名称] ; - 此类的实例,点为斜线
  • ( [args] ) [返回类型] - 方法签名

例如:

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

会变成

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

请参阅Sun ^ H ^ H ^ HOracle网站上的spec

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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