Chào mừng bạn đến blog Ynghialagi.com Trang Chủ

Table of Content

Class là gì trong Java

Không gì .classcó nghĩa là trong Java? Ví dụ, nếu tôi tạo một lớp được gọi là Print. Điều gì Print.classtrở lại?

Khi bạn viết .classsau một tên lớp, nó tham chiếu đến lớp chữ - java.lang.Classđối tượng thể hiện thông tin về lớp đã cho.

Ví dụ, nếu lớp của bạn là Print, thì đó Print.classlà một đối tượng đại diện cho lớp Printtrong thời gian chạy. Nó là cùng một đối tượng được trả về bởi getClass()phương thức của bất kỳ thể hiện (trực tiếp) nào của Print.

Print myPrint = new Print(); System.out.println(Print.class.getName()); System.out.println(myPrint.getClass().getName());

.class được sử dụng khi không có phiên bản của lớp.

.getClass() được sử dụng khi có một thể hiện của lớp có sẵn.

object.getClass() trả về lớp của đối tượng đã cho.

Ví dụ:

String string = "hello"; System.out.println(string.getClass().toString());

Điều này sẽ xuất ra:

class java.lang.String

Đây là lớp của đối tượng chuỗi :)

Nếu có một thể hiện của một đối tượng, thì cách đơn giản nhất để lấy Class của nó là gọi Object.getClass()

các .classcú pháp

Nếu loại có sẵn nhưng không có phiên bản thì có thể lấy Class bằng cách thêm .classvào tên của loại. Đây cũng là cách dễ nhất để có được Class cho kiểu nguyên thủy.

boolean b; Class c = b.getClass(); // compile-time error Class c = boolean.class; // correct

Xem: docs.oracle.com về lớp học

Chỉ cần làm rõ, phương thức '. Class' này không đề cập đến tệp mã byte mà bạn thấy sau khi biên dịch mã java cũng như sự nhầm lẫn giữa các khái niệm Class so với Object trong lý thuyết OOP.

Phương thức '. Class' này được sử dụng trong Java để phản chiếu mã. Nói chung, bạn có thể thu thập dữ liệu meta cho lớp của mình, chẳng hạn như tên lớp đủ điều kiện, danh sách các hằng số, danh sách các trường công cộng, v.v.

Kiểm tra các liên kết này (đã được đề cập ở trên) để có được tất cả các chi tiết:
https://docs.oracle.com/javase/tutorial/reflect/
class / classNew.html https://docs.oracle.com/javase/8/docs /api/java/lang/Class.html

Thông thường, bạn không có kế hoạch sử dụng Reflection ngay khi bạn bắt đầu xây dựng dự án của mình. Đó là thứ bạn biết bạn cần sau khi cố gắng quản lý mã đã hoạt động. Nhiều lần bạn cần nó để quản lý nhiều phiên bản của chương trình của bạn. Có thể bạn muốn xác định từng 'bản sao' cụ thể để xác định xem một cái gì đó đã được xác định chưa, hoặc đếm số lượng hàm, hoặc chỉ đơn giản là ghi nhật ký chi tiết của một thể hiện cụ thể của lớp bạn.

Nếu không có sẵn phiên bản thì .classcú pháp được sử dụng để lấy đối tượng Class tương ứng cho một lớp nếu không bạn có thể sử dụng phương thức getClass () để lấy đối tượng Class. Vì không có kiểu dữ liệu nguyên thủy, chúng ta phải sử dụng .classcú pháp cho kiểu dữ liệu nguyên thủy.

package test; public class Test { public static void main(String[] args) { //there is no instance available for class Test, so use Test.class System.out.println("Test.class.getName() ::: " + Test.class.getName()); // Now create an instance of class Test use getClass() Test testObj = new Test(); System.out.println("testObj.getClass().getName() ::: " + testObj.getClass().getName()); //For primitive type System.out.println("boolean.class.getName() ::: " + boolean.class.getName()); System.out.println("int.class.getName() ::: " + int.class.getName()); System.out.println("char.class.getName() ::: " + char.class.getName()); System.out.println("long.class.getName() ::: " + long.class.getName()); } }

Tôi nghĩ chìa khóa ở đây là hiểu được sự khác biệt giữa Class và Object. Một đối tượng là một thể hiện của Class. Nhưng trong một ngôn ngữ hướng đối tượng hoàn toàn, Class cũng là một Object . Vì vậy, việc gọi .classđược tham chiếu đến đối tượng Class của Class đó, sau đó có thể được thao tác.

Một nghĩa đen của lớp là một biểu thức bao gồm tên của một lớp, giao diện, mảng hoặc kiểu nguyên thủy hoặc khoảng trống kiểu giả, theo sau là một '.' và lớp mã thông báo. Một trong những thay đổi trong JDK 5.0 là lớp java.lang.Class là chung java.lang.Class Class<T>, do đó:

Class<Print> p = Print.class;

Tham khảo tại đây:

https://docs.oracle.com/javase/7/docs/api/java/lang/Class.html

http://docs.oracle.com/javase/tutorial/extra/generics/literals.html

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.8.2

Video liên quan

Đăng nhận xét