• 反射


    反射的作用   发生在查询运行期的行为  

    通过外部输入获取类,将类变为容易配置的变量

    1.在创建类型的对象的时候,获取的是类型的Class对象的一个镜像|复制体

    2.在一个类加载到内存时就会存在这个类型唯一的Class对象(方法,属性,构造器...)

    3.如果能够拿到一个类型的Class对象,就可以操作这个类

    一  获取class类的方法   Class<范型> 引用

    1直接获取

    类名.calss              通过类名获取Class类的对象

    对象.class              通过对象名获取Class类的对象

    基本数据类型.class      获取基本数据类型的Class对象

    基本数据包装类.class 获取包装类的Class类的对象

    基本数据包装类.TYPE     通过基本数据包装类获取基本数据类型Class类的对象

    2通过Class类方法获取

    Class.forName(权限定名)         (静态)通过包名+类名获取Class类的对象

    子类class对象.getSuperclass()  通过子类获取父类的Class类的对象

    二  Class类的基本方法

    getInterface()     获取类或接口所实现的所有接口的数组

    newInstance()      通过class对象调用空构造创建对应类的实例

    getMOdifiers()     获取class对象所有的修饰符,返回int值(修饰符的整数编码之和)

    getName()          获取包名+类名

    getSimpleName()     获取类名

    isPrimitive()      判断是否是基本数据类

    isArray()          判断是否是Array类的对象

     

    三  反射在构造器中的应用

    1   Class类中的方法

    getConstructor(参数类)         根据输入的参数类返回指定的public构造器对象

    getConstructors()              获取所有public的构造器,返回构造器数组

    getDeclaredConstructor(参数类) 根据输入的参数类返回指定的构造器对象

    getDeclaredConstructors()      获取所有构造器,返回构造器数组

    2   Constructor类的方法

    newInstance(实参)          根据实参创建对象,实参为可变参数,可以为空

    getName()                  返回string格式的包名+类名

    setAccessible(boolean) 更改构造器的权限,true为public,false为private

     

    四  反射在方法中的应用

    1   Class类中的方法

    getMethod (方法名,参数类)        

    根据参数类返回指定的public方法对象(不包括继承), 参数类为可变参数

    getMethods()                        

    获取所有public的方法,返回方法数组(包括继承)

    getDeclaredMethod(方法名,参数类)

    根据输入的参数类返回指定的方法对象(不包括继承) 参数类为可变参数

    getDeclaredMethods()            

    获取所有方法,返回方法数组(包括继承)

    2   Method类中的方法

    invoke(对象|null,实参)     

    成员方法根据对象和实参执行方法,实参为可变参数, 静态方法将对象设为null

    setAccessible(boolean)

    更改方法的修饰权限,true为public,false为private

    getName() 

    返回string格式的方法名

    五  反射在字段中的应用

    1   Class类中的方法

    getDeclaredField(String name)

    根据变量名获取字段的Field对象

    Field[] getDeclaredFields()

        获取所有字段的Field对象,返回 Field数组

    Field getField(String name)

    根据变量名获取public字段的Field对象

    Field[] getFields()

        获取所有public字段的Field对象,返回 Field数组

    2   Field类中的方法

    set(对象|null,设置值)  根据对象和设置值修改成员字段,若是静态字段,对象设为null

    get(对象|null)        获取字段值, 成员字段指定对象,静态字段指定null

    setAccessible(boolean) 更改方法的修饰权限,true为public,false为private

    getName()              返回string格式的字段名

    其他    通过字段对象和Class对象,通过对字段名的拼接获取这个字段的公共的set|get

    六  反射在数组中的应用

    数组均为Array类

    Array类中

    newInstance(成员类,长度)        根据成员类和长度创建Array类的对象

        静态方法set(数组对象,索引,设置内容)设置内容

    静态方法get(数组对象,索引)获取内容

  • 相关阅读:
    Python--json处理
    Python--加密模块
    Python--函数即变量
    bzoj 2276: [Poi2011]Temperature
    1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛
    2017 9 15 noip模拟赛
    bzoj 1612: [Usaco2008 Jan]Cow Contest奶牛的比赛
    2017 9 11 noip模拟赛T2
    URAL 1613. For Fans of Statistics (2017 9 6 noip模拟赛T3)
    codeforces 105 B. Dark Assembly(birbe贿赂 noip模拟赛)
  • 原文地址:https://www.cnblogs.com/javaxiaobu/p/11043430.html
Copyright © 2020-2023  润新知