當我看到我的Java項目的字節碼,我看到下面的字節碼:。字節碼之間的區別。 <init>()V vs。 <init>(Z)V
java.lang.Object中()V
的java.lang.Boolean( ž)V
什麼是< INIT>()V和< INIT>的含義(Z)V
當我看到我的Java項目的字節碼,我看到下面的字節碼:。字節碼之間的區別。 <init>()V vs。 <init>(Z)V
java.lang.Object中()V
的java.lang.Boolean( ž)V
什麼是< INIT>()V和< INIT>的含義(Z)V
java.lang.Object.()V
是java.lang.Object
空隙方法(V
)不帶參數。
java.lang.Boolean.(Z)V
是java.lang.Boolean
空隙方法採用單個boolean
(Z
因爲B
是byte
)參數。
總之,
abc.def.WXYZ(IIIIIIIIIIIIII)J
^ ^ ^
target_class argument-types return_type
更多細節參見JNI Type Signatures。
JNI使用Java VM的類型簽名表示。表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使用的字節碼中的方法簽名。
<init>()V and <init>(Z)V
是construtor簽名。對於JVM構造函數,就像其他方法一樣,它們的名稱總是<init>
),並且返回值始終爲V
(表示void)。在我們的例子Z
意味着boolean
參數(B
保留用於byte
)
是
<init>(Z)V
類測試的字節碼是指
class Test {
Test(boolean arg0) {
}
}
你也能滿足
static <clinit>()V
表示靜態初始化塊
static {
...
}