Không gì .class
có 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.class
trở lại?
.class
cú pháp chỉ liên quan đến sự .class
mở rộng tên tệp.
Không gì .class
có 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.class
trở lại?
.class
cú pháp chỉ liên quan đến sự .class
mở rộng tên tệp.
Câu trả lời:
Khi bạn viết .class
sau 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.class
là một đối tượng đại diện cho lớp Print
trong 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());
Writer.class.getDeclaredField("writeBuffer")
.
Print.class
gì?
new Intent(this, Activity.class
như thế nào? Nó sẽ cố gắng tìm ra class Activity
bằng cách so sánh từng lớp?
.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 :)
getClass()
chỉ hữu ích nếu bạn có một tham chiếu trỏ đến một đối tượng của lớp. ClassName.class
có thể được sử dụng ngay cả khi lớp không có phiên bản. Ví dụ, xem xét Math.class
. Mỗi cái đều đúng cho những tình huống nhất định.
.class
và.getClass().
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 .class
cú 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 .class
và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
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ì .class
cú 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 .class
cú 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.
in a fully object-oriented language, a Class is also an Object
? <cần dẫn nguồn>
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