学习
17.6 反射机制
动态获取信息以及动态调用对象的方法称为Java的反射机制。
反射机制提供功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法。
范例 17-8 根据对象找到类1
package com.Javastudy2;
import java.util.Date;
/**
* @author Y.W.
* @date 2018年6月20日 下午11:05:18
* @Description TODO 根据对象找到类1
*/
public class P446_17_8 {
public static void main(String[] args) {
Date date = new Date();
Class<?> cls = date.getClass(); // 通过反射机制得到类的包名
System.out.println(cls);
}
}
运行结果:
运行结果
取得Class类的实例化对象的三种方法:
方式1:利用Object类的getClass()方法,但要求必须先产生指定类的对象才可以,实际几乎不用。
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类提供的一个方法完成,在系统框架中使用。
Class<?> cls = Class.forName("java.util.Date");
System.out.println(cls);
范例 17-9 根据对象找到类2
package com.Javastudy2;
/**
* @author Y.W.
* @date 2018年6月20日 下午11:29:29
* @Description TODO 根据对象找到类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开发");
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;
}
}
运行结果:
运行结果
小结
反射相比确实稍微难一点。
记于2018年6月20日23:54:37
By Yvan