反射
一 创建对象
1)方法一 :
Class<?> c = Class.forName("com.westos.entity.Product"); // 得到类对象
Product p2 = (Product)c.newInstance();// 创建新的实例对象
2)方法二 :
Class<?> c = Product.class;
Product p2 = (Product)c.newInstance();// 创建新的实例对象
二 获取方法
1. 获取多个方法
Method[] methods = c.getDeclaredMethods();// 得到这个类中所有声明的方法(不包括继承的) 公有私有都包括
Method[] methods = c.getMethods();// 得到本类以及继承的所有公共方法
2. 获取某个方法
Method getId = c.getMethod("getId");//不含参数
Method setId = c.getMethod("setId", int.class);//含参数(一个参数)
Method test = c.getMethod("test",int.class,String.class);//含多个参数
注意: 1)getMethod()只能获得公共访问方法
2)Method getId = c.getDeclaredMethod("getId");
getId.setAccessible(true);
可以突破私有的限制
3. 调用方法
Product p =new Product();
1)无参数
p.setId(1);
getId.invoke(p);// <==> p.getId()
2)有参数
setId.invoke(p,1);// <==> p.setId(1)
4.获取类中的属性
1) 获取多个属性
Field[] fields = c.getDeclaredFields();// 得到本类所有的属性(公有,私有...)
2) 获取一个属性
Field name = c.getDeclaredField("name");
name.setAccessible(true); // 突破私有属性限制
3) 赋值
Product p = new Product();
name.set(p,"篮球"); // <==> p.name ="篮球";
4) 获取值
System.out.println(name.get(p)); // <==> System.out.println(p.name);
............................................................................................................................................................................................待续