当我观察我的 Java 项目字节码时,我看到以下字节码:
java.lang.Object.()V
java.lang.Boolean.(Z)V
<init>()V和<init>(Z)V是什么意思
java.lang.Object.()V
是一个不带参数的 void 方法 ( V
) 。java.lang.Object
java.lang.Boolean.(Z)V
是一个 void 方法,java.lang.Boolean
它接受一个boolean
(Z
因为B
是byte
)参数。
简而言之,
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
这是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 {
...
}