当我观察我的 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 {
...
}