Chúng ta đã nói về thực tế rằng các lớp là các kiểu dữ liệu phức tạp. Bây giờ chúng ta hãy nói một chút về khía cạnh khác của các lớp — cách các lớp được xử lý bởi máy Java. Hãy nhớ rằng trong Java, mọi thứ đều là một đối tượng, thậm chí là một lớp. Một lớp là một đối tượng. Nó có làm bạn ngạc nhiên không? Sau đó chúng ta hãy tiếp tục đi.

Đang tải một lớp vào bộ nhớ

Trên thực tế, khi một lớp được nạp vào bộ nhớ, ba "đối tượng" đặc biệt được tạo ra:

Đang tải một lớp vào bộ nhớ

Mô tả ngắn gọn về hình minh họa:

Hình chữ nhật màu vàng:

Tệp mã được lưu trữ trên đĩa dưới dạng tệp có phần mở rộng ".class". Nó chứa thông tin về lớp, các trường và phương thức của nó, cũng như mã nguồn của các phương thức được biên dịch thành mã byte.

Hình chữ nhật màu cam:

Khi máy Java tải một lớp vào bộ nhớ, nó sẽ biên dịch mã byte thành mã máy dành riêng cho bộ xử lý và hệ điều hành của máy tính. Chỉ máy Java mới có quyền truy cập vào mã máy này. Là lập trình viên Java, chúng tôi không có quyền truy cập vào nó.

Hình chữ nhật màu xanh lá cây:

Máy Java tạo một đối tượng chứa tất cả các biến và phương thức tĩnh của lớp. Bạn truy cập vào "đối tượng" này bằng tên lớp.

Ví dụ: khi bạn viết , bạn đang đề cập đến biến tĩnh nằm trong lớp. Đối tượng này là hình chữ nhật màu xanh lá cây của chúng tôi. Và đó là nơi lưu trữ biến tĩnh.java.lang.Math.PIPIjava.lang.Mathjava.lang.MathPI

Hình chữ nhật màu xanh:

Khi máy Java tải mã của một lớp vào bộ nhớ, nó sẽ tạo một java.lang.Classđối tượng đặc biệt, lưu trữ thông tin về lớp đã tải: tên, tên phương thức, tên trường và loại, v.v.

Cái tên "Class" có thể hơi khó hiểu. Sẽ hợp lý hơn khi gọi nó là ClassInfo, vì lớp này chỉ lưu trữ một số thông tin về lớp đã tải.

Bạn có thể lấy đối tượng Lớp cho bất kỳ loại nào bằng lệnh như sau:

Class name = ClassName.class;

Ví dụ:

Mã số Ghi chú
Class a = String.class;
Nhận một Classđối tượng có thông tin về Stringlớp
Class b = Object.class;
Nhận một Classđối tượng có thông tin về Objectlớp
Class c = Integer.class;
Nhận một Classđối tượng có thông tin về Integerlớp
Class d = int.class;
Nhận một Classđối tượng với thông tin về intloại
Class e = void.class;
Nhận một Classđối tượng với thông tin về voidloại

Bạn cũng có thể lấy tham chiếu đến đối tượng mô tả lớp từ bất kỳ đối tượng nào, vì mỗi đối tượng có phương getClass()thức mà nó kế thừa từ Objectlớp.

Ví dụ:

Mã số Ghi chú
Class a = "Hello".getClass();
Đối tượng tương tự nhưString.class
Class b = new Integer().getClass();
Đối tượng tương tự nhưInteger.class
Class c = Boolean.TRUE.getClass();
Đối tượng tương tự nhưBoolean.class