字节码之间的区别。 ()V VS。 (Z)V(Difference between byt

2019-08-16 18:28发布

当我看到我的Java项目的字节码,我看到下面的字节码:

java.lang.Object中。()V

java.lang.Boolean的。(Z)

什么是<初始化>()V<初始化>(Z)V的含义

Answer 1:

java.lang.Object.()V 

是空隙方法( V上) java.lang.Object不带参数。

java.lang.Boolean.(Z)V 

是空隙方法java.lang.Boolean采用单个booleanZ因为Bbyte )参数。

简而言之,

 abc.def.WXYZ(IIIIIIIIIIIIII)J
 ^            ^              ^ 
 target_class argument-types return_type

见JNI类型签名的更多细节。

JNI用类型签名的Java虚拟机的代表。 表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 


Answer 2:

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

<init>()V and <init>(Z)V是construtor签名。 对于JVM构造是一样的任何其它方法,它们有一个名称,它总是<init> ),和一个返回值,这始终是V (意味着无效)。 在我们的例子Z意味着boolean参数( B保留用于byte

那是

<init>(Z)V

在课堂上测试的字节码的手段

class Test {

    Test(boolean arg0) {
    }
}

也可以配合

 static <clinit>()V

这意味着静态初始化块

static {
...
}


文章来源: Difference between byte code .()V vs .(Z)V
标签: java bytecode