“()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表示空类型。 字节码不区分构造函数与其他方法(除了使用特殊方法名称)。