• 反射


    反射:
    在运行时,可以获得任意一个类或对象的所有方法(private的也能获取(待定))和属性(就是三种方法从class文件(字节码文件)中获取文件中的各种关于类的信息,然后可以用来创建对象
    通过对应类的字节码文件获得类的方法和属性(作用:比如可以通过某些方法,匹配相应的信息)
    获得CLass对象)
    应用场景:
    学习框架,框架的底层会大量使用反射.SSH
    调用配置文件
    前提:
    获取类的对象(Class(字节码)对象)
    获取方式(3种):
    通过Object的getClass方法,必须要有对象,返回值是Class对象
    目标类的class属性,返回值是Class对象
    Class类的forName方法,返回值时Class对象(推荐使用)

    CLass:
     Constructor<?>[] getConstructors()  获取所有的构造方法(public修饰的)
     Constructor<T> getConstructor(Class<?>... parameterTypes)
     获取有参或者无参的构造方法

    Constructor:
    T newInstance(Object... initargs)  
    获取Constructor的实例,实例的构造方法参数与Constructor的参数相同

    方式二:
     T newInstance()
     使用CLass的方法创建无参的对象

    注:
    用getConstructor方法,里面填的参数是对应属性类型的class属性,而不是具体值或者直接的数据类型,因为里面传的参数是Class<?>... parameterTypes,是数据类型的class属性。

    通过反射获得成员变量
    Class:
     Field getField(String name) 获取公共的属性(自动匹配参数的值,如果有就返回指定的属性)
     Field[] getFields()  获取所有公共的属性
     Field getDeclaredField(String name) 获取属性(包括私有,自动匹配参数的值,如果有就返回指定的属性)
     Field[] getDeclaredFields()  获取所有的属性(包括私有)
    Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)  获取构造方法(包括私有)
    Filed:

    void set(Object obj, Object value)  对获取的Field进行设置属性值
    Object get(Object obj)  获取指定field的属性值

    AccessibleObject:Field的基类:暴力访问
     void setAccessible(boolean flag) 如果flag为true,就取消Java设置的访问权限
     
    Method getMethod(String name, Class<?>... parameterTypes)  
    获取方法,传入方法名,如果有参数就传入参数类型的字节码属性
    Method[] getMethods()  


    JavaBean:
    用于封装数据,就是类= =

    BeanUtils
     static void setProperty(Object bean, String name, Object value)
     static String getProperty(Object bean, String name)
    这两个方法底层是JavaBean中的set和get方法
     static void populate(Object bean, Map properties)
    将map中的映射关系传到JavaBean中

    如果赋的值是由父类继承过来的,还能用这个方法吗


    反射的好处:
    1.三种方式,class,getClass,forName,可以在不知道JavaBean的类型的情况下获取其中的数据,也可以创建对象获取数据,也可以不知道类型
    2.可以在不知道属性类型的情况下设置或者获取属性值

    Declared方法和普通方法的区别:
    普通的方法只能返回被public修饰的方法,但是可以返回所有继承来的父类的方法
    Declared方法可以返回所有类型的方法,但是不能返回继承来的方法

    单个声明或者说声明特定值需要写参数,如果返回的是数组就不需要

  • 相关阅读:
    pig中将两列合并为一列:concat
    最小二乘法拟合二元多次曲线
    动态重新加载Class机制之代码测试
    從 Windows Form ComboBox、ListBox 或 CheckedListBox 控制項加入或移除項目
    C#控件一览表
    C#中combobox 和TreeView控件属性、事件、方法收集
    PHP 分页类 潇湘博客
    一个房屋中介业务建模的实例分析
    使用Limit参数优化MySQL查询 潇湘博客
    word中的字号与实际的字体大小一一对应的关系
  • 原文地址:https://www.cnblogs.com/Yuanpp/p/8445761.html
Copyright © 2020-2023  润新知