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:
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.PI
PI
java.lang.Math
java.lang.Math
PI
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ú |
---|---|
|
Nhận một Class đối tượng có thông tin về String lớp |
|
Nhận một Class đối tượng có thông tin về Object lớp |
|
Nhận một Class đối tượng có thông tin về Integer lớp |
|
Nhận một Class đối tượng với thông tin về int loại |
|
Nhận một Class đối tượng với thông tin về void loạ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ừ Object
lớp.
Ví dụ:
Mã số | Ghi chú |
---|---|
|
Đối tượng tương tự nhưString.class |
|
Đối tượng tương tự nhưInteger.class |
|
Đối tượng tương tự nhưBoolean.class |
GO TO FULL VERSION