Đối tượng lớp là một đối tượng meta mô tả lớp của đối tượng.Nó được sử dụng chủ yếu với khả năng phản chiếu của Java. Bạn có thể nghĩ về nó như một "kế hoạch chi tiết" của lớp thực tế. Ví dụ. bạn có một lớp Xe như thế này:
public class Car {
public String brand;
}
Sau đó bạn có thể xây dựng đối tượng Lớp mô tả lớp "Xe hơi" của bạn.
Class myCarClass = Class.forName("Car");
Bây giờ bạn có thể làm tất cả các loại truy vấn trên lớp xe của bạn trên mà đối tượng Class:
myCarClass.getName() - returns "Car"
myCarClass.getDeclaredField("brand") - returns a Field object describing the "brand" field
và vân vân. Mỗi đối tượng java có một phương thức getClass() trả về đối tượng Class mô tả Lớp của đối tượng Java. Vì vậy, bạn có thể làm điều gì đó như:
Car myCar = new Car();
Class myCarClass = myCar.getClass();
Điều này cũng làm cho các đối tượng bạn không biết, ví dụ như các đối tượng bạn nhận được từ bên ngoài:
public void tellMeWhatThisObjectsClassIs(Object obj) {
System.out.println(obj.getClass().getName());
}
Bạn có thể ăn phương pháp này bất kỳ đối tượng java và nó sẽ in lớp thực tế của đối tượng mà bạn đã cho nó.
Khi làm việc với Java, hầu hết thời gian bạn không cần lo lắng về các đối tượng Lớp học. Họ có một số trường hợp sử dụng tiện dụng mặc dù. Ví dụ. chúng cho phép bạn lập trình instanciate đối tượng của một lớp nhất định, được sử dụng thường xuyên cho serialization đối tượng và deserialization (ví dụ như chuyển đổi Java Objects để XML và ngược lại, cũng chủ yếu là trở lại).
Class myCarClass = Class.forName("Car");
Car myCar = myCarClass.newInstance(); // is roughly equivalent to = new Car();
Bạn cũng có thể sử dụng nó để tìm hiểu tất cả các trường hoặc phương thức đã khai báo của lớp học của bạn, rất hữu ích trong một số trường hợp nhất định. Vì vậy, ví dụ: nếu phương pháp của bạn được truyền một đối tượng không xác định và bạn cần biết thêm về nó, như thể nó bổ sung một số giao diện, vv, lớp Class là bạn của bạn ở đây.
Vì vậy, câu chuyện dài ngắn, lớp, trường, phương pháp, vv. Các lớp trong gói java.lang.reflect cho phép bạn phân tích các lớp, phương thức, trường đã xác định của bạn, tạo các phiên bản mới các loại công cụ khác và chúng cho phép bạn thực hiện điều này một cách linh hoạt khi chạy.
Và thật thú vị khi nghĩ về điều này hơn nữa. Lớp 'Class' kế thừa từ' Object'. 'Class.class' trả về một đối tượng' Class' đại diện cho lớp 'Class'. Bạn có thể suy ngẫm về sự phản chiếu. ASPLODE HEAD CỦA TÔI. – cdhowie
@cdhowie Không sử dụng Ruby nhiều, phải không? :-) –
@pst: Tôi có. Nó khiến tôi muốn làm tổn thương người khác.Bất kỳ ngôn ngữ/khuôn khổ nào với [nhiều người này] (http://ruby-doc.org/core/classes/Object.html) phương pháp trên loại gốc của nó xứng đáng được chôn cất. Nó có hội chứng tack-random-crap-on-the-API-without-any-forethought theo phong cách PHP. Cue ngọn lửa ... – cdhowie