黑马程序员技术交流社区

标题: 【石家庄校区】反射 [打印本页]

作者: 李皓321    时间: 2018-4-23 15:43
标题: 【石家庄校区】反射
本帖最后由 小石姐姐 于 2018-4-25 15:45 编辑

JAVA进阶(反射,javaBena,Beanutils工具类)

   反射概述:
1, 反射的目的
2, 反射能做的工作:
                     1,获取一个类的所有构造方法。
                                创建一个类的对象。
                  2,获取一个类的所有成员属性
                                获取属性值
                                设置属性值
                  3,获取一个类的所有成员方法
                                 调运成员方法               
反射机制概述,获取字节码对象的3种方式:
                    Reflect:在程序运行时,获取任何一个类的所有属性和方法(包括私有的)
                       获取类的字节码对象
1,通过Object类的getClass()方法获取,必须要有对象
2,通过类名获取字节码文件
3,student  clazz3 = Class.forName("com.itheima_01.Sdudent")
反射获取构造方法并创建对象
     1,java.lang.Class类:类的字节码对象:
            2,    java.lang.reflect.Constructor 类: 构造方法对象
注意:Class 类和 Constructor 类中都有 T newInstance() 方法, 都使用类的
           无参构造创建对象。
反射获取一个类的构造方法的步骤
          1. 获取该类 Class 字节码对象(3种方式)
          2. 通过 Class 对象调用方法获取构Constructor造方法对象
          3. 通过 Constructor 对象调用方法创建该类的对象
反射获取public成员变量: 设置和获取值
1,Field[] getFields() : 获取所有public的成员变量
2,Field[] getDeclaredFields() : 获取所有权限的成员变量, 包括private的
3,Field getField(String fieldName) : 通过指定的成员变量名获取指定的public的成员变量
4,Field getDeclaredField(String fieldName) : 通过指定的成员变量名获取指定的所有权限的成员变量,
包括private的
    1,  Object get(Object obj) : 获取指定对象的属性值. 传入对象, 返回该对  象的属性值
2,void set(Object obj, Object value) : 将指定对象的属性值设置为指定的值. 传入对象和属性值
3,void setAccessible(boolean canAccess) : 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员属性
1. 获取该类 Class 字节码对象(3种方式)
2. 通过 Class 对象调用 newInstance() 方法创建该类的对象
3. 通过 Class 对象调用获取成员属性的方法获取属性对象
4. 通过 Field 对象设置或获取属性值
反射获取私有成员变量并修改
1. 获取该类 Class 字节码对象(3种方式)
2. 通过 Class 对象调用 newInstance() 方法创建该类的对象
3. 通过 Class 对象调用获取成员属性的方法获取属性对象
4. 设置 Field 对象的访问权限(也叫作 暴力访问 )
          void setAccessible(boolean canAccess) : 设置为true时可以
          访问所有权限的成员属性
5. 通过 Field 对象设置或获取属性值
反射获取成员方法并调用
获取成员方法
1,Method[] getMethods() : 返回所有public的方法数组
2,Method[] getDeclaredMethods() : 返回所有权限的方法数组
3,Method getMethod(String name, Class<?>... parameterTypes) : 获取public的方法, 传入方法名和方法形参字节码对象
4,Method getDeclaredMethod(String name, Class<?>...  parameterTypes) : 获取所有权限的指定方法,传入方法名和方法形参字节码对象
java.lang.reflect.Method 类: 成员方法对象 :
        1,Object invoke(Object obj, Object... args) : 调用指定对象的成员方法。
       2,  void setAccessible(boolean canAccess) : 设置为true时禁用Java的
               访问安全检查, 可以访问所有权限的成员方法。
反射获取成员方法并调用的步骤:
     1. 获取该类 Class 字节码对象(3种方式)
2. 通过 Class 对象调用 newInstance() 方法创建该类的对象
3. 通过 Class 对象调用获取成员方法的方法获取方法对象
4. 使用 Method 对象的 Object invoke(Object obj, Object... args) 方法调用方法, 传入该类的对象和参
数, 返回方法的返回值
私有方法, 也是 setAccessible(true) 获取访问权限       
JavaBean概述和规范
JavaBean:
     概念:就是一个类(个人或组织编写,导入调用)
     作用:封装数据
     规范:
             类必须是Public修饰
             通过private的成员变量保存数据
             通过public的get\set方法操作数据
             实现Serializable接口(用于使用IO流传输对象到文件或网络)






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