黑马程序员技术交流社区

标题: c哩c哩 [打印本页]

作者: 艾特yo    时间: 2017-12-24 21:49
标题: c哩c哩
通过获取的构造创建对象


步骤:
1.获得Class对象
2.获得构造
3.通过构造对象获得实例化对象


通过反射获取构造方法并使用
                        Constructor<?>[] getConstructors()  获取所有public修饰的构造方法
                        Constructor<T> getConstructor(Class<?>... parameterTypes) (有参)
                         T newInstance()   (无参)
Constructor:
                 T newInstance(Object... initargs)  
通过反射获取成员变量并使用  
                        Field[] getFields()  :获取公共的 成员变量
                        Field getField(String name)  :根据字段名称获取公共的字段对象

                         Field[] getDeclaredFields()  :获取所有的 成员变量       
                         f.setAccessible(true);//设置反射时取消Java的访问检查,暴力访问
                         Field getDeclaredField(String name) 暴力反射获取指定名称字段

  Field:
                          Object get(Object obj)  通过对象获取成员变量的值
                          void set(Object obj, Object value) 通过成员变量对象,修改指定对为指定的值

反射public方法执行流程
1.?获取学生类字节码对象
2.?反射手段创建学生对象
3.?调用getMethod方法获取Method对象, 方法形参接受方法的名字
4.?调用Method方法中的invoke()将方法运行



通过反射获取成员方法并使用  
*                Method getMethod(String name, Class<?>... parameterTypes)  
                Method getDeclaredMethod(String name, Class<?>... parameterTypes)  
*        Method:
*                Object invoke(Object obj, Object... args)  

BeanUtils:Apache commons提供的一个组件,主要功能就是为了简化JavaBean封装数据的操作
                        static void        setProperty(Object bean, String name, Object value) :给JavaBean对象的成员变量进行赋值
                        static String getProperty(Object bean, String name)
                        static void        populate(Object bean, Map properties)

注意:BeanUtils的setProperty和getProperty方法底层并不是直接操作成员变量,而是操作和成员变量名有关的get和set方法



自定义BeanUtils工具类:

public static void setProperty(Object bean,String name,Object value)
                // 设置任意对象的, 任意属性, 为任意的值

                //根据JavaBean对象获取对应的字节码对象
                Class clazz = bean.getClass();
                //根据字节码对象获取对应的Field对象
                Field f = clazz.getDeclaredField(name);
                //设置权限,让虚拟机不进行访问的检查
                f.setAccessible(true);
                //赋值
                f.set(bean, value);

public static String getProperty(Object bean,String name)
                // 获取任意对象的任意属性
public static void populate(Object bean,Map map)
                // 修改任意对象中的属性, 为传入Map集合中的键和值



作者: 陈文老师    时间: 2017-12-25 09:04
继续加油~~棒棒哒
作者: 1414225997    时间: 2017-12-25 10:24
继续努力!
作者: xiongliu    时间: 2017-12-26 11:00
继续努力,加油!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2