Triển khai lớp hệ thống Java


8

Lớp Java Systemchứa các thành viên dữ liệu và các phương thức khác nhau có ý nghĩa hoàn hảo ở đó. Ví dụ:

System.in (variable)
System.err (variable)
System.out (variable)
System.exit(int)
System.gc()
System.getSecurityManager()

v.v. Tuy nhiên, có một phương pháp mà tôi không hiểu là ở đó:

System.arraycopy(Object, int, Object, int int)

Sao chép một mảng sang một mảng khác cho tôi cảm giác như nó thuộc về Arrayslớp; sau đây từ tài liệu:

Lớp này chứa các phương thức khác nhau để thao tác các mảng (như sắp xếp và tìm kiếm). Lớp này cũng chứa một nhà máy tĩnh cho phép các mảng được xem như danh sách.

Các phương pháp để thao tác các mảng là những gì chỉ cho tôi kết luận này, vì sao chép một mảng này sang mảng khác chắc chắn là thao tác mảng , phải không?

Vì vậy, câu hỏi của tôi: tại sao là arraycopy()trong System?

Đây có phải là một di tích của Systemviệc triển khai lớp Java sớm không? Phương pháp này không được đánh dấu là không dùng nữa, vì vậy tôi hơi lạc lõng. Hơn nữa, nó không tuân theo tiêu chuẩn Java camelCase, điều này khiến tôi suy nghĩ lại rằng đó là một di tích của thiết kế thư viện ban đầu.


Có lẽ bởi vì trước đây không phải là một nơi tốt để đặt nó, và bây giờ đã quá muộn để di chuyển nó.
dùng253751

Câu trả lời:


8

System.arraycopyđược thực hiện tự nhiên bởi mỗi JVM. Đây là khai báo phương thức:

public static native void arraycopy(Object src,  int  srcPos,
                                    Object dest, int destPos,
                                    int length);

Điều này có nghĩa là nó sao chép mảng theo cách nhanh nhất có thể trong các hướng dẫn lắp ráp gốc. Ý tưởng là đây là một chức năng thường rất cần thiết, có khả năng làm chậm mà Java sẽ cung cấp hành vi này ở mức độ thấp.

Các cách khác để sao chép mảng hoặc bọc System.arraycopyhoặc sử dụng các vòng lặp diễn giải, sẽ không phải là biểu diễn.


Được rồi điều này có một chút ý nghĩa bây giờ; Tôi không biết rằng mỗi JVM có cách triển khai riêng của nó. Điều đó nói rằng, tất cả các native phương pháp trong System? Bằng cách đặt tên theo quy ước, nó có ý nghĩa, bởi vì chúng phụ thuộc vào hệ thống , nhưng từ quan điểm của tổ chức, arraycopysẽ có ý nghĩa được định nghĩa trong Arraylớp hoặc một cái gì đó tương tự, và có triển khai nguyên gốc ở đó. Cá nhân tôi arraycopychỉ sử dụng một lần trong 5 năm lập trình.
Chris Cirefice 17/03/2015

5
Nó vẫn còn đó vì lý do tương thích ngược. Ngoài ra, trong khi không phải tất cả các nativephương thức đều nằm trong System, không có nativephương thức nào trong đó java.util.Arrays.
durron597 17/03/2015

Tôi hiểu rồi, rõ ràng những câu hỏi mà tôi đã có, cảm ơn!
Chris Cirefice 17/03/2015

4

Đây có phải là di tích của việc triển khai lớp Hệ thống Java sớm không?

System.arraycopy là một trong những phần lâu đời nhất của thư viện, trong khi java.util.Arrays đã được thêm vào 1.2. Tôi sẽ không gọi mảng là một di tích vì không có bất cứ thứ gì thay thế trực tiếp và các phương pháp sao chép khác nhau trong Mảng được thực hiện theo cách đó.

Không có gì đặc biệt về Hệ thống hoặc Mảng yêu cầu các phương thức gốc phải ở trong một hoặc ngăn không cho chúng ở bên kia.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.