2010-02-15 37 views
12

Mảng được triển khai dưới dạng đối tượng trong java phải không? Nếu vậy, tôi có thể xem mã nguồn cho lớp mảng ở đâu. Tôi tự hỏi nếu biến chiều dài trong mảng được định nghĩa là một hằng số và nếu vậy tại sao nó không phải là tất cả các chữ cái viết hoa LENGTH để làm cho mã dễ hiểu hơn.Các mảng được triển khai trong java như thế nào?

+4

Nếu nó là một hằng số (như trong một lĩnh vực thức tĩnh), tất cả các mảng sẽ phải có cùng kích thước (hoặc các mảng có kích thước khác nhau sẽ phải có các loại khác nhau (điều này sẽ hàm ý thêm rằng kích thước của một mảng sẽ phải được biết tại thời gian biên dịch)). – sepp2k

+0

Từ những gì tôi hiểu từ câu trả lời của Yishai dưới đây là mảng được tạo động khi nó được xác định. – AFK

+0

Điểm của sepp2k là không có một trường độ dài toàn cầu. Nói chung, chúng tôi nghĩ rằng các biến trường hợp trên là tĩnh công cộng và cuối cùng. Chiều dài ở đây là công khai và cuối cùng, nhưng không tĩnh và giá trị của nó là khác nhau đối với mỗi cá thể đối tượng, mặc dù nó không bao giờ thay đổi. – Yishai

Trả lời

13

Mặc dù mảng là Đối tượng theo nghĩa là chúng kế thừa java.lang.Object, các lớp được tạo động như một tính năng đặc biệt của ngôn ngữ. Chúng không được định nghĩa trong mã nguồn.

Cân nhắc mảng này:

MySpecialCustomObject[] array; 

Không có mã nguồn cho điều đó. Bạn đã tạo mã đó theo kiểu động.

Lý do tại sao độ dài nằm trong trường hợp thấp hơn và một trường thực sự là thực tế là các tiêu chuẩn mã hóa Java sau này không tồn tại tại thời điểm được phát triển. Nếu một mảng đã được phát triển ngày hôm nay, nó có lẽ sẽ là một phương thức: getLength().

Độ dài là trường cuối cùng được xác định tại cấu trúc đối tượng, nó không phải là hằng số, vì vậy một số tiêu chuẩn mã hóa sẽ không muốn ở dạng chữ hoa. Tuy nhiên nói chung trong Java ngày nay tất cả mọi thứ thường được thực hiện như là một hằng số trong trường hợp trên hoặc đánh dấu riêng tư với một phương thức getter công cộng, ngay cả khi nó là cuối cùng.

+0

phác thảo chung cho một lớp mảng được tạo ra là gì? – AFK

+2

@ sn3twork, Về cơ bản mảng có tất cả các phương thức của đối tượng, cộng với biến công khai cuối cùng và nó có phương thức sao chép công khai, triển khai Cloneable và Serializable (nhưng tôi giả định vì lý do kế thừa không lặp lại được). Chi tiết có trong JLS: http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html – Yishai

+0

nhờ liên kết http://java.sun.com/docs/books/ jls/second_edition/html/arrays.doc.html # 11358 Tôi tìm thấy nơi nó nói về việc xác định các mảng bằng cách sử dụng các bộ khởi tạo mảng và các biểu thức sáng tạo – AFK

-1

Có thể nói rằng Mảng là một vùng chứa chứa độ dài cố định của dữ liệu của loại dữ liệu đơn lẻ. ví dụ:

int[] MyArray = new int[101]; // allocates memory for 101 integers, Range from 0 to 100. 

và đa chiều

String[][] names = {{"FirstName", "LastName"},{"Kaji", "Islam"},...}; 

và cho mảng nhân vật

char[] ch={'a','b'....}; 
Các vấn đề liên quan