9

当我观察我的 Java 项目字节码时,我看到以下字节码:

java.lang.Object.()V

java.lang.Boolean.(Z)V

<init>()V<init>(Z)V是什么意思

4

2 回答 2

15
java.lang.Object.()V

是一个不带参数的 void 方法 ( V) 。java.lang.Object

java.lang.Boolean.(Z)V

是一个 void 方法,java.lang.Boolean它接受一个booleanZ因为Bbyte)参数。

简而言之,

 abc.def.WXYZ(IIIIIIIIIIIIII)J
 ^            ^              ^ 
 target_class argument-types return_type

有关更多详细信息,请参阅JNI 类型签名

JNI 使用 Java VM 的类型签名表示。表 3-2 显示了这些类型签名。

表 3-2 Java VM 类型签名

Type Signature             Java Type
Z                          boolean
B                          byte
...
L fully-qualified-class ;  fully-qualified-class
[ type                      type[]
( arg-types ) ret-type      method type

例如,Java 方法:

long f (int n, String s, int[] arr); 

具有以下类型签名:

(ILjava/lang/String;[I)J
于 2013-02-06T04:58:35.620 回答
4

这是JVM使用的字节码中的所有方法签名。

<init>()V and <init>(Z)V是构造函数签名。对于 JVM 构造函数,就像任何其他方法一样,它们有一个名称,它总是<init>) 和一个返回值,它总是V(意味着 void)。在我们的例子Z中是指boolean参数(B为 保留byte

那是

<init>(Z)V

在类测试的字节码意味着

class Test {

    Test(boolean arg0) {
    }
}

你也可以遇见

 static <clinit>()V

这意味着静态初始化块

static {
...
}
于 2013-02-06T05:14:09.013 回答