Java 字节码之间的差异。<;初始化>;()V vs;初始化>;(Z) 五

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项目字节码时,我看到以下字节码:

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_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 {
...
}