Loại mảng đặc biệt trong Java. Đây là một đoạn trích từ JLS 10.7 Array Members
Các thành viên của một loại mảng là tất cả những điều sau đây:
- Các
public final
lĩnh vực length
, trong đó có số lượng các thành phần của mảng (chiều dài có thể tích cực hay số không).
- Phương thức
public
clone
, ghi đè phương thức cùng tên trong lớp Object
và không ném ngoại lệ đã kiểm tra. Kiểu trả về của phương thức sao chép của một loại mảng T[]
là T[]
.
- Tất cả các thành viên được kế thừa từ đối tượng lớp; phương pháp duy nhất của đối tượng không được kế thừa là phương pháp
clone
của nó.
Mặc dù vậy, vẫn còn lỗi cũ đứng khi bạn đang sử dụng phản ánh trên các mảng: không length
cũng không clone
có thể được tìm thấy thông qua sự phản ánh (bug# 5047859, bug# 4987375).
Không có thành viên nào được kế thừa theo cách truyền thống từ bất kỳ siêu lớp nào; tất cả các loại mảng đều mở rộng từ Object
trực tiếp. Điều này "điều trị đặc biệt" có thể là lý do tại sao các lỗi này tồn tại ở nơi đầu tiên.
"điều này có nghĩa là sẽ không bao giờ có thể thấy biến chiều dài được xác định?"
Không có mã nguồn thực sự cho các loại mảng. Một lần nữa, những loại này là đặc biệt; JVM chỉ rút ra những loại mũ này bất cứ khi nào chúng được yêu cầu. Bạn sẽ không thấy tệp nguồn .java
cho loại mảng int[].class
(tức là loại của tất cả các mảng int
).
Vì vậy, không có, bạn sẽ không thể thấy các length
lĩnh vực xác định.
Để đọc thêm, đây là một số thông tin về Java Reflection:
Có phải chúng ta đang nói về chiều dài chuỗi, chiều dài mảng, kích thước đối tượng hay không? –
@ Jason: Tôi nghĩ anh ấy đang nói về mảng. – missingfaktor
@ Jason, tôi nghĩ rằng anh ấy đang nói về mảng.length, String không có biến độ dài, nó có phương thức length() (điều này gây nhầm lẫn vì nó không phải là getLength()). – medopal