Khi tôi quan sát mã byte dự án Java của tôi, tôi xem mã byte sau:..Sự khác biệt giữa mã byte. <init>() V so với. <init> (Z) V
java.lang.Object() V
java.lang.Boolean (Z) V
ý nghĩa của < init>() V và < init> là gì (Z) V
Khi tôi quan sát mã byte dự án Java của tôi, tôi xem mã byte sau:..Sự khác biệt giữa mã byte. <init>() V so với. <init> (Z) V
java.lang.Object() V
java.lang.Boolean (Z) V
ý nghĩa của < init>() V và < init> là gì (Z) V
java.lang.Object.()V
là một phương pháp void (V
) trên java.lang.Object
rằng không có đối số.
java.lang.Boolean.(Z)V
là một phương pháp khoảng trống trên java.lang.Boolean
mà phải mất một đơn boolean
(Z
từ B
là byte
) lập luận.
Nói tóm lại,
abc.def.WXYZ(IIIIIIIIIIIIII)J
^ ^ ^
target_class argument-types return_type
Xem JNI Type Signatures để xem chi tiết hơn.
JNI sử dụng chữ ký loại của máy ảo Java. Bảng 3-2 cho thấy các chữ ký kiểu này.
Bảng 3-2 Java VM Loại Signatures
Type Signature Java Type Z boolean B byte ... L fully-qualified-class ; fully-qualified-class [ type type[] (arg-types) ret-type method type
Ví dụ, phương pháp Java:
long f (int n, String s, int[] arr);
có kiểu chữ ký sau đây:
(ILjava/lang/String;[I)J
Đó là tất cả chữ ký phương thức trong bytecode được JVM sử dụng.
<init>()V and <init>(Z)V
là chữ ký construtor. Đối với các hàm tạo JVM giống như bất kỳ phương thức nào khác, chúng có tên, luôn là <init>
) và giá trị trả về luôn là V
(có nghĩa là void).Trong trường hợp của chúng tôi Z
nghĩa boolean
tham số (B
được dành riêng cho byte
)
đó là
<init>(Z)V
trong bytecode class Test có nghĩa
class Test {
Test(boolean arg0) {
}
}
bạn cũng có thể đáp ứng
static <clinit>()V
có nghĩa là khối khởi tạo tĩnh
static {
...
}