康元中
day13
今天学习了反射相关的内容
1 反射可以获取一个类的成员和构造,以前我们是通过set/get创建对象来访问,现在用反射可以通过获取该类的字节码对象
然后字节码对象调用各种方法来访问成员和构造.
首先是访问构造方法的步骤: 创建字节码对象(三种方式) Class.forName("全类名");
然后调用Class类里的方法:
///创建有参构造------重点主要是传递参数这边要注意: 传递的是有参构造的 (变量类型.class) 不要加"";
Constructor c = clazz.getConstructor(String.class,int.class);
//通过有参构造创建对象(这个对象是在这边是Student 类对象)
//这边注意( 参数的传递 )
Object stu = c.newInstance("张飞",20); //传递参数
//打印创建好的这个对象(已经重写toString 方法打印成员信息);
System.out.println(stu);
还有 Constructor[] c = clazz.getConstructors()//通过该类的字节码--可以访问所有public 修饰的构造方法;
onstructor c = clazz.getConstructor();
2 获取成员变量的步骤:
Field f = clazz.getDeclaredField("name");
f.setAccessible(true);//暴力反射(获取私有的成员一定得开true)
//通过这个字段给成员变量name赋予值;
f.set(stu, "张飞");//参数1是成员变量所在的对象/参数2是给成员变量赋的值
Object name = f.get(stu);//参数是 该成员变量所在的对象
System.out.println(name);
还有
Field[] getFields() 和 Field[] getDeclaredFields() 注意区别获取public修饰的/ 获取所有的包括私有
Object get(Object obj) 和void set(Object obj, Object value) Field 字段里的方法
Field getField(String name) 和Field getDeclaredField(String name)
3获取成员方法的步骤:
Method m = clazz.getMethod("setName",String.class);//参数1是方法的名字/参数2是参数.class
m.invoke(stu, "张飞");// 参数1是 该类所在的对象/参数2是给这个参数赋值
System.out.println(stu);// 打印对象
参照访问私有成员变量的方式,访问私有成员方法用到的方法getDeclaredMethod()
还有其他的方法:
Method[] m = clazz.getMethods();//打印public 修饰的所有方法
下午学习了BeanUtil 相关的知识
1 javaBean的封装数据的操作一些操作规范
实例化一个serv。。。的接口且随机生成一个序列号
重写set/get方法和无参构造
2学习自定义一个BeanUtil
populate()参数一为bean对象参数二为Map集合。这个方法就是通过map集合的里面的键值对 给与bean对象
赋值。 |