A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 厦门校区   /  2018-5-12 15:02  /  11805 人查看  /  97 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

康元中
  今天学习反射,反射是一种可以动态访问一个类的成员和构造.
第一个重点  掌握如何去访问一个类的构造/方法和变量
    都是通过创建字节码对象 然后通过字节码对象调用一些方法 返回到相对应的字段/ 构造/method
然后要掌握以下的一些方法和类似的区别  
1 getConstructor(String.class,int.class);//获取有参构造,参数1类型为String,参数2类型为int
Object obj = c.newInstance("lisi",30); 创建对 象      
2 Field getField(String name) 获取指定的成员变量 返回字段对象
    Field getDeclaredField(String name) //获取指定的成员变量 包含私有
3 Method m = clazz.getDeclaredMethod("setName", String.class)
    Object invoke(Object obj, Object... args)  
注意 访问私有的变量和成员时要暴力反射 开启setAccessible(true)
第二个重点是 学习Beanutil 这个工具类里面的一些方法  setProperty getProperty 和populate (bean,map)这个方法重要           
   javabean(标准书写规范)
回复 使用道具 举报
康元中
  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对象
        赋值。
回复 使用道具 举报
康元中
  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对象
        赋值。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马