2010-02-15 29 views

Trả lời

2

Class là một loại đặc biệt của Object, tức là Class là một lớp con của Object. Mỗi lớp bạn xác định có đối tượng Class riêng. Bạn có thể truy cập số này dưới dạng MyObject.class hoặc myInstance.getClass(). Trong một từ khác, bất kỳ lớp nào bạn xác định có thuộc tính Class trong đó bất kỳ lớp nào là Object. Tôi đồng ý nó hơi gây nhầm lẫn với một newbie.

1

javadoc nói:

thể hiện của lớp lớp đại diện cho các lớp và giao diện trong một ứng dụng Java chạy. Một enum là một loại lớp và chú thích là một loại giao diện. Mỗi mảng cũng thuộc về một lớp được phản ánh như một đối tượng Lớp được chia sẻ bởi tất cả các mảng có cùng loại phần tử và số thứ nguyên. Các kiểu Java nguyên thủy (boolean, byte, char, short, int, long, float và double), và void từ khóa cũng được biểu diễn như các đối tượng Class.

Lớp học không có người xây dựng công khai. Thay vào đó các đối tượng Class được xây dựng tự động bởi Máy ảo Java vì các lớp được nạp và các cuộc gọi đến phương thức defineClass trong trình nạp lớp.

1

Bạn có thể sử dụng nó khi kiểm tra loại biến số hoặc kiểm tra thời gian chạy kế thừa. Nó cũng được sử dụng để phản ánh, tải các kiểu động và thực thi các phương thức trên chúng.

4

Có một số cách sử dụng cho đối tượng Lớp. Ví dụ, nói rằng tôi muốn tạo một thể hiện của một lớp dựa trên một số tên lớp được lưu trữ trong một tập tin cấu hình.

String className = config.myClass; 
Class clazz = Class.forName(className); 
Object myClassInstance = clazz.newInstance(); 
+0

Trường hợp này có được tạo bằng phản chiếu không? – greg

+0

Tôi không chắc chính xác định nghĩa của sự phản chiếu là gì. Tôi đã luôn luôn nghĩ về nó như yêu cầu một lớp học về chính nó. Ví dụ, khi bạn nhận được đối tượng Class cho một lớp, bạn có thể yêu cầu một danh sách các phương thức và các trường của nó. Bạn thậm chí có thể gọi một trong các phương thức của nó. Đối tượng Class.getDeclaredMethods trả về cho bạn một cá thể Method mà bạn có thể gọi là "invoke". –

+1

Vâng, đó là sự phản ánh. Đối tượng java.lang.Class cho phép truy cập vào tất cả các phương thức phản chiếu. –

3

Nó đại diện cho loại thời gian chạy của đối tượng. Việc sử dụng có lập trình thực tế của loại Class thường được tìm thấy trong reflectiongenerics.

Ví dụ, tải một trình điều khiển JDBC trừu tượng với sự giúp đỡ của Class#forName():

String jdbcDriverClassName = getItFromSomeExternalConfigurationFile(); 
Class.forName(jdbcDriverClassName); 

Hoặc typecasting một generic Object đến một loại beforeknown:

public static <T> T findAttribute(String key, Class<T> type) { 
    return type.cast(attributeMap.get(key)); // It's a Map<String, Object>. 
} 

... mà có thể được sử dụng như

SomeType instance = findAttribute("someKey", SomeType.class); 

Ví dụ mở rộng hơn có thể tìm thấy here trong hương vị của một "bộ chuyển đổi đối tượng chung".

Thực ra, hãy đọc java.lang.Class javadoc, bao gồm tất cả các phương pháp có sẵn, sẽ cung cấp cho bạn ý tưởng về phương thức có thể sử dụng.

+0

Wtf là downvote về? : D Thôi nào, để lại một bình luận để chúng ta có thể thảo luận và học hỏi với nhau. – BalusC

1

Từ cuốn sách Thinking in Java:

Các đối tượng Class

Để hiểu làm thế nào Run Time Loại thông tin (RTTI) hoạt động trong Java, trước tiên bạn phải biết làm thế nào loại thông tin được thể hiện tại thời gian chạy . Điều này được thực hiện thông qua một loại đối tượng đặc biệt được gọi là đối tượng Lớp, chứa thông tin về lớp học. Trong thực tế, đối tượng Class được sử dụng để tạo tất cả các đối tượng 'thường xuyên' của các lớp học của bạn là .

Các vấn đề liên quan