文章目錄
- 一、什麼是java反射機制?
- 二、Class類有什麼特點?
- 三、擷取Class類的執行個體化對象
-
- 1.forName方法
- 2.類名.class
- 3.包裝類.TYPE
- 4.getClass方法
- 5.元素類型[].class
- 6.調用某個類的Class類執行個體化對象的getSuperClass方法
一、什麼是java反射機制?
Java反射機制是在運作狀态中,對于任何一個類我們都可以調用其中的屬性和方法,對于任意一個對象我們都可以調用它的屬性和方法,這種動态操作類和對象的屬性和方法的機制叫Java反射機制。
Java反射機制為了實作對成員變量,普通方法,構造方法的操作,需要借助Java自身提供的java.lang包下的Class類和java.lang.reflect包下反射API
二、Class類有什麼特點?
Class類是Java反射機制的入口
如果封裝了一個類或接口的運作時資訊,可以通過調用Class類來擷取這些資訊
按住Ctrl鍵再将滑鼠浮到Class上可以檢視Class類的資訊
①該類在java.lang包中
可以通過檢視Class類的資訊(26行)看到下圖
也可以通過下列代碼查出
public class Test {
public static void main(String[] args) {
System.out.println(Class.class);//擷取Class類的執行個體
}
}
執行結果證明Class類在java.lang包下
②該類被final修飾,該類不可以被子類繼承(在Class類的119行可以看到下圖)
該類不可以被子類繼承
③該類實作了Serializable接口(119行)
④該類的構造方法用private修飾,不能通過new關鍵字建立該類的對象(137行)
三、擷取Class類的執行個體化對象
Class類不能通過new關鍵詞建立對象
1.forName方法
通過Class類靜态forName(“類包名.類名”)擷取Class執行個體
public class Test{
public static void main(String[] args) {
try {
Class<?> class1 = Class.forName("java.lang.Class");//如果泛型不确定?确定
System.out.println(class1);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
2.類名.class
public class Test{
public static void main(String[] args) {
Class<Student> student = Student.class;
System.out.println(student);
}
}
class Student{
}
3.包裝類.TYPE
如果是基本資料類型,可以通過包裝類.TYPE擷取Class類的執行個體化對象,也可以通過基本資料類型.class擷取
①
public class Test{
public static void main(String[] args) {
Class<Boolean> class1 = Boolean.TYPE;
System.out.println(class1);
}
}
②
public class Test{
public static void main(String[] args) {
Class<Boolean> cl = Boolean.class;
System.out.println(cl);
}
}
4.getClass方法
public class Test{
public static void main(String[] args) {
Class<?> student = new Student().getClass();
System.out.println(student);
}
}
class Studnet{
}
5.元素類型[].class
public class Test{
public static void main(String[] args) {
Class<String[]> clazz = String[].class;
System.out.println(clazz);
}
}
6.調用某個類的Class類執行個體化對象的getSuperClass方法
public class Test{
public static void main(String[] args) {
Class<?> clazz = Student.class.getSuperclass();
System.out.println(clazz);
}
}
class Studnet{
}