學習
17.6 反射機制
動態(tài)獲取信息以及動態(tài)調(diào)用對象的方法稱為Java的反射機制。
反射機制提供功能:在運行時判斷任意一個對象所屬的類;在運行時構(gòu)造任意一個類的對象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調(diào)用任意一個對象的方法。
范例 17-8 根據(jù)對象找到類1
package com.Javastudy2;
import java.util.Date;
/**
* @author Y.W.
* @date 2018年6月20日 下午11:05:18
* @Description TODO 根據(jù)對象找到類1
*/
public class P446_17_8 {
public static void main(String[] args) {
Date date = new Date();
Class<?> cls = date.getClass(); // 通過反射機制得到類的包名
System.out.println(cls);
}
}
運行結(jié)果:

運行結(jié)果
取得Class類的實例化對象的三種方法:
方式1:利用Object類的getClass()方法,但要求必須先產(chǎn)生指定類的對象才可以,實際幾乎不用。
Date date = new Date();
Class<?> cls = date.getClass();
System.out.println(cls);
方法2:利用“類.class”的形式取得Class類的對象,在Hibernate上使用。
Class<?> cls = java.util.Date.class;
System.out.println(cls);
方式3:利用Class類提供的一個方法完成,在系統(tǒng)框架中使用。
Class<?> cls = Class.forName("java.util.Date");
System.out.println(cls);
范例 17-9 根據(jù)對象找到類2
package com.Javastudy2;
/**
* @author Y.W.
* @date 2018年6月20日 下午11:29:29
* @Description TODO 根據(jù)對象找到類2
*/
public class P447_17_9 {
public static void main(String[] args) throws Exception {
Class<?> cls = Class.forName("com.Javastudy2.Book8");
Book8 book = (Book8) cls.newInstance(); // 實例化一個對象
book.setTitle("Java開發(fā)");
book.setPrice(79.8);
System.out.println(book);
}
}
class Book8 {
private String title;
private double price;
public void setTitle(String title) {
this.title = title;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "圖書名稱:" + this.title + ",價格:" + this.price;
}
}
運行結(jié)果:

運行結(jié)果
小結(jié)
反射相比確實稍微難一點。
記于2018年6月20日23:54:37
By Yvan