Java 字节码之间的差异。<;初始化>;()V vs;初始化>;(Z) 五
当我观察Java项目字节码时,我看到以下字节码: java.lang.Object.()V java.lang.Boolean.(Z)V (V和(Z)V的含义是什么 是Java 字节码之间的差异。<;初始化>;()V vs;初始化>;(Z) 五,java,bytecode,Java,Bytecode,当我观察Java项目字节码时,我看到以下字节码: java.lang.Object.()V java.lang.Boolean.(Z)V (V和(Z)V的含义是什么 是java.lang.Object上不带参数的void方法(V) 是java.lang.Boolean上的一个无效方法,它接受一个Boolean(Z),因为B是byte)参数 总之, abc.def.WXYZ(IIIIIIIIIIIIII)J ^ ^ ^ target_clas
java.lang.Object
上不带参数的void方法(V
)
是java.lang.Boolean
上的一个无效方法,它接受一个Boolean
(Z
),因为B
是byte
)参数
总之,
abc.def.WXYZ(IIIIIIIIIIIIII)J
^ ^ ^
target_class argument-types return_type
有关更多详细信息,请参阅
JNI使用JavaVM的类型签名表示。表3-2显示了这些类型签名
表3-2 Java虚拟机类型签名
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使用的字节码中的所有方法签名
()V和(Z)V
是构造函数签名。对于JVM构造函数,与任何其他方法一样,它们有一个名称(总是
)和一个返回值(总是V
(表示无效)。在我们的例子中,Z
表示boolean
参数(B
是为byte
保留的)
就是
<init>(Z)V
你也可以见面
static <clinit>()V
<init>(Z)V
class Test {
Test(boolean arg0) {
}
}
static <clinit>()V
static {
...
}