反射的原理:
反射的实现:
/*反射:
* 1.创建对象
* 2.构造无参数方法
* 3.获取类属性
* 4.给属性赋值
* 5.获取类方法
* 6.执行方法
*/
public class ReflectDemo {
public static void main(String[] args) {
/*创建反射对象(三种方法)
* 1. class.forname("");
* 2. 类名.class属性
* 3. 对象.getClass()
*/
try {
//方法1
Class cls = Class.forName("edu.com.book.fengzhuang.BookType");
//方法2 Class cls =BookType.class
//方法3 BookType bt = new BookType();
// Class cls = bt.getClass();
System.out.println(cls.getName());
//2.构造无参方法
Object obj = cls.newInstance();
/*
* 3.获取类的属性
*/
//根据属性的名称来获取属性对象(Filed)---只能获取public的属性
// Field f1 = cls.getField("btid");
//根据属性的名称来获取属性对象(Filed)---可以获取所有权限的属性
Field f2 = cls.getDeclaredField("btid");
System.out.println(f2.getType().toString());
//获取所有的属性
Field[] f2s = cls.getDeclaredFields();
//4.给属性赋值
f2.setAccessible(true);//设置访问权限
f2.set(obj, "张三");
BookType bt =(BookType)obj;
System.out.println(bt.getBtid());
//5.获取类中的方法(下面是获取public方法为例)
//1获取无参方法
Method m1 = cls.getMethod("getBtid");
//2.获取有参方法
Method m2 = cls.getMethod("setBtid", String.class);
//6.执行方法
m2.invoke(obj, "1234");
Object o = m1.invoke(obj);
System.out.println(o);
}