字节代码之间的差异.<init>()V vs.<init>(Z)V

sae*_*bal 8 java bytecode

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

java.lang.Object中.()V

java.lang.Boolean的.(Z)V

<init>()V<init>(Z)V的含义是什么?

Mik*_*uel 13

java.lang.Object.()V
Run Code Online (Sandbox Code Playgroud)

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

java.lang.Boolean.(Z)V
Run Code Online (Sandbox Code Playgroud)

是空隙方法java.lang.Boolean采用单个boolean(Z因为BIS byte)参数.

简而言之,

 abc.def.WXYZ(IIIIIIIIIIIIII)J
 ^            ^              ^ 
 target_class argument-types return_type
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅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
Run Code Online (Sandbox Code Playgroud)

例如,Java方法:

long f (int n, String s, int[] arr); 
Run Code Online (Sandbox Code Playgroud)

具有以下类型签名:

(ILjava/lang/String;[I)J
Run Code Online (Sandbox Code Playgroud)