文章目錄
- 1. 任何的實體化物件可以通過 Object 類中的 getClass() 方法取得 Class 類物件:
- 注意:
- 在反射的世界里, 該方法中的泛型只能用 `?` 來體現, 這時候可以理解為是呼叫 Object 類進行操作處理, 而如果寫入實際的型別則會報錯.
- 2. "類.class" : 直接根據某一個具體的類來取得Class 類的實體化物件;
- 3. 使用 Class 類提供的方法:
- 反射實體化物件
- 第二種實體化物件的方式
Class 類是描述整個類的概念, 所以也是整個反射的操作源頭, 那么在使用Class 類的時候需要關注的依然是這個類的物件, 而這個類的物件的產生模式, 一共有三種:
1. 任何的實體化物件可以通過 Object 類中的 getClass() 方法取得 Class 類物件:
public final 類<?> getClass()
package com.cwq.beyond;
import java.util.Date;
public class TestDemo04 {
public static void main(String[] args) {
// 在反射的世界里,
Class<?> cls = new Date().getClass();
System.out.println(cls.getName());
System.out.println(cls);
}
}
注意:
在反射的世界里, 該方法中的泛型只能用 ? 來體現, 這時候可以理解為是呼叫 Object 類進行操作處理, 而如果寫入實際的型別則會報錯.
2. “類.class” : 直接根據某一個具體的類來取得Class 類的實體化物件;
package com.cwq.beyond;
import java.util.Date;
public class TestDemo04 {
public static void main(String[] args) {
// 在反射的世界里,
Class<?> cls = Date.class; // 不需要實體化Date 類物件了
System.out.println(cls.getName());
System.out.println(cls);
}
}
3. 使用 Class 類提供的方法:
public static 類<?> forName(String className)
throws ClassNotFoundException
使用 forName() 方法
package com.cwq.beyond;
public class TestDemo04 {
public static void main(String[] args) throws ClassNotFoundException {
// 在反射的世界里,
Class<?> cls = Class.forName("java.util.Date"); // 直接使用字串描述要使用的類, 無需 import
System.out.println(cls.getName());
System.out.println(cls);
}
}
在以上給出的三個方法里面我們會發現一個神奇的地方: 除了第一種形式會產生Date 類的實體化物件之外, 其他兩種都不會產生 Date類的實體化物件, 于是, 取得了 Class 類物件有一個最直接的好處 : 可以直接通過反射實體化物件, 在Class 類中定義有如下一個方法:
public T newInstance()
throws InstantiationException,
IllegalAccessException
反射實體化物件
package com.cwq.beyond;
public class TestDemo04 {
public static void main(String[] args) throws Exception {
// 在反射的世界里,
Class<?> cls = Class.forName("java.util.Date"); // 直接使用字串描述要使用的類, 無需 import
Object object = cls.newInstance(); // 實體化物件 :等價 new java.util.Date()
System.out.println(cls.getName());
System.out.println(cls);
}
}
第二種實體化物件的方式
從上面代碼發現除了關鍵字 new 之外, 對于物件的實體化物件有了第二種做法, 通過反射進行, 取得了Class 物件就意味著取得了一個指定類的操作權,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/243561.html
標籤:java
上一篇:生產者和消費者
下一篇:Java-陣列拷貝
