字节代码之间的区别。<init>()V vs。<init>(Z)V </init> </init>

时间:2013-02-06 04:57:04

标签: java bytecode

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

java.lang.Object中。()V

java.lang.Boolean的。(Z)V

&lt; init&gt;()V &lt; init&gt;(Z)V

的含义是什么

2 个答案:

答案 0 :(得分:13)

java.lang.Object.()V

V上的void方法(java.lang.Object),不带任何参数。

java.lang.Boolean.(Z)V

java.lang.Boolean上的一种无效方法,只需boolean Z B byte} abc.def.WXYZ(IIIIIIIIIIIIII)J ^ ^ ^ target_class argument-types return_type 。{/ p>

简而言之,

Type Signature             Java Type
Z                          boolean
B                          byte
...
L fully-qualified-class ;  fully-qualified-class
[ type                      type[]
( arg-types ) ret-type      method type

有关详细信息,请参阅JNI Type Signatures

  

JNI使用Java VM的类型签名表示。表3-2显示了这些类型的签名。

     

表3-2 Java VM类型签名

long f (int n, String s, int[] arr); 
     

例如,Java方法:

(ILjava/lang/String;[I)J
     

具有以下类型签名:

{{1}}

答案 1 :(得分:3)

这是JVM使用的字节码中的所有方法签名。

<init>()V and <init>(Z)V是construtor签名。对于JVM构造函数与任何其他方法一样,它们具有名称,始终为<init>),并且返回值始终为V(表示无效)。在我们的案例中,Z表示boolean参数(B保留给byte

<init>(Z)V
在类Test中的

字节码意味着

class Test {

    Test(boolean arg0) {
    }
}

你也可以见面

 static <clinit>()V

表示静态初始化块

static {
...
}