Tôi không thể hiểu được văn bản sau ... Có nghĩa là <clinit>
dành cho các nhà thầu trống không? Tại sao lại quan trọng để có hai phiên bản khác nhau?Java: Sự khác biệt giữa <init> và <clinit> là gì?
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html
2.9. Special Methods
Ở cấp của máy ảo Java, mỗi nhà xây dựng (§2.12) xuất hiện như một phương pháp khởi dụ rằng có tên đặc biệt
<init>
. Tên này được cung cấp bởi trình biên dịch. Vì tên<init>
không phải là số nhận dạng hợp lệ, nó không thể được sử dụng trực tiếp trong chương trình được viết bằng ngôn ngữ lập trình Java. Các phương thức khởi tạo có thể được gọi chỉ trong máy ảo của Java theo hướng dẫn không đặc biệt và chúng có thể được gọi chỉ trên các cá thể lớp chưa được khởi tạo. Một phương thức khởi tạo thể hiện nhận các quyền truy cập (§2.7.4) của hàm tạo từ đó nó được bắt nguồn.Một lớp hoặc giao diện có tối đa một lớp hoặc phương thức khởi tạo giao diện và được khởi tạo (§2.17.4) bằng cách gọi phương thức . Phương thức khởi tạo của một lớp hoặc giao diện là tĩnh và không có đối số. Nó có tên đặc biệt
<clinit>
. Tên này là do trình biên dịch cung cấp. Vì tên<clinit>
không phải là số nhận dạng hợp lệ , nó không thể được sử dụng trực tiếp trong chương trình được viết bằng ngôn ngữ lập trình Java . Các phương thức khởi tạo lớp và giao diện được gọi ngầm bởi máy ảo Java; chúng không bao giờ được gọi được gọi trực tiếp từ bất kỳ máy ảo Java inw2struction nào, nhưng chỉ được gọi gián tiếp như là một phần của quá trình khởi tạo lớp.
gì 'CL' đứng cho? –
Đoán của tôi là "lớp học". – Thilo
@Thilo thật thú vị vì JVM xử lý định nghĩa lớp cũng như một loại đối tượng khác nữa. –