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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李皓321 初级黑马   /  2018-4-23 15:43  /  488 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小石姐姐 于 2018-4-25 15:45 编辑

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

   反射概述:
1, 反射的目的
  • 反射可以在不修改源代码的前提下,改变程序的运行方式
  • 反射是后期web框架的底层实现基础,帮我们更好理解框架原理

2, 反射能做的工作:
  • 前提条件:获取一个类的字节码对象,然后通过该字节码对象可以:

                     1,获取一个类的所有构造方法。
                                创建一个类的对象。
                  2,获取一个类的所有成员属性
                                获取属性值
                                设置属性值
                  3,获取一个类的所有成员方法
                                 调运成员方法               
反射机制概述,获取字节码对象的3种方式:
  • 反射:

                    Reflect:在程序运行时,获取任何一个类的所有属性和方法(包括私有的)
  • 反射的前提:

                       获取类的字节码对象
  • 获取 class文件三个方法:

1,通过Object类的getClass()方法获取,必须要有对象
2,通过类名获取字节码文件
3,student  clazz3 = Class.forName("com.itheima_01.Sdudent")
反射获取构造方法并创建对象
  • 反射使用的相关类和方法

     1,java.lang.Class类:类的字节码对象:
  •    获取构造方法:

  •         Constructor<?>[ ]  getConstructors():以数组形式返回该类中所有public的构造方法,如果没有public的,则数组长度为0.
  •         Constructor<?>[] getDeclaredConstructors() : 以数组形式返回该类中所有权限的构造方法, 包括private的. 如果该类是接口, 基本类型, 数组, void, 则数组长度为0。
  •         Constructor<T> getConstructor(Class<?>... parameterTypes) : 根据参数列表返回指定的public的构造方法. 参数列表填写参数的字节码对象。
  •         Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) : 根据参数列表返回指定的所有权限的构造方法, 包括private的. 参数列表填写参数的字节码对象。

  •    创建对象

  •      T newInstance() : 使用该类的无参构造创建一个对象。

            2,    java.lang.reflect.Constructor 类: 构造方法对象
  • T newInstance() : 通过无参构造方法对象创建一个类的对象
  • T newInstance(Object... initargs) : 通过有参构造方法对象创建一个类的对象, 传入构造方法所需的参数列表 。
  • void setAccessible(boolean canAccess) : 设置为true时禁用Java的访问安全检查, 可以访问所有权限的构造方法 。

注意:Class 类和 Constructor 类中都有 T newInstance() 方法, 都使用类的
           无参构造创建对象。
反射获取一个类的构造方法的步骤
          1. 获取该类 Class 字节码对象(3种方式)
          2. 通过 Class 对象调用方法获取构Constructor造方法对象
          3. 通过 Constructor 对象调用方法创建该类的对象
反射获取public成员变量: 设置和获取值
  • java.lang.Class 类中的获取成员变量的方法:

1,Field[] getFields() : 获取所有public的成员变量
2,Field[] getDeclaredFields() : 获取所有权限的成员变量, 包括private的
3,Field getField(String fieldName) : 通过指定的成员变量名获取指定的public的成员变量
4,Field getDeclaredField(String fieldName) : 通过指定的成员变量名获取指定的所有权限的成员变量,
包括private的
  • java.lang.reflect.Field 类: 成员变量对象

    1,  Object get(Object obj) : 获取指定对象的属性值. 传入对象, 返回该对  象的属性值
2,void set(Object obj, Object value) : 将指定对象的属性值设置为指定的值. 传入对象和属性值
3,void setAccessible(boolean canAccess) : 设置为true时禁用Java的访问安全检查, 可以访问所有权限的成员属性
  • 反射获取一个类的public成员变量的步骤

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流传输对象到文件或网络)

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马