• Reflect


    1.反射--reflect

    面向对象的编程思想
    类   从很多对象中抽取出来的共有的特征行为 抽象描述 用来描述一组对象
    
    对象  现实生活中 存在好多对象 很多共同特征 相同行为类是用来描述一组对象
    反射机制认为是用来描述一组类
    

    Class 用来描述类本身

    Package 用来描述类中所属的包

    Field 用来描述类中的属性

    Method 用来描述类中的方法

    Construstor 用来描述类中的构造方法

    Annotation 用来描述类中的注解

    2.操作

    1.获取Class(相当于获取到了File对象)

    Class clazz=Class.forName("包名.类名“)
    Class clazz=类名.class
    Class clazz=对象.getClass()//Object类中的方法

    2.Class中的常用方法

    1.getModifiers();
    获取类的修饰符(权限,特征)
    每一个修饰符 用一个整数来进行表示
    每一个修饰符 用一个整 数来进行表示
    0开始-0 1 2 4 8 16 32 64 128  256 512
    0-default 1-public 2-private 4-protected
    8-static 16-final 32-synchronized 64.volatile
    128-transient 256-native 5112-interface 1024-abstract  
    
    2.getName()
    类全名
    3.getSimpleName()
    类名
    4.getPackage()
    p.getName()
    5.getSuperClass()
    获取超类(父类)
    getClasses()
    获取类中的内部类(public)
    6.getInterfaces();
    获取当前类的所有父接口
    7.newInstance()
    默认调用无参构造方法创建对象
    8.getField("属性名")
    getFields()
    如上的两个方法只能获取共有的属性 但是包含继承过来的父类属性
    
    9.getDeclaredField("属性")
    getDeclaredFields()
     如上两个方法能获取共有的和私有的属性 但是只能获取本类中的属性
    

    3.Field类中的常用方法

    int getModifers();
    获取属性修饰符(不包含私有)
    Class getType();
    属性类型
    String getName();
    属性名字
    操作属性
    set(对象,值) ——向里面存值
    get(对象) ——从里面取值
    setAccessable(true)
    可以修改私有属性被操作的状态

    4.Method

    操作Class类中的方法
    class.getMethod

    ("方法名",参数对应的Class)//获取公有方法(本类和父类)

    class.getMethods()

    获取所有的方法(共有 自己+父类)

    getDeclaredMethod("方法名字",参数类型的class...)

    获取一个方法(自己类 共有 私有)

    getDeclaredMethods()

    获取全部方法(自己类 共有 私有)

    获取构造方法
    clazz.getConstructor(Class...参数类型)

    eg:String.class

    clazz.getConstructors()
    clazz.getDeclaredConstructor()

    获取自己类共有私有方法

    clazz.getDeclaredConstructors()
    Method类中的常用方法:
    int modifiers = m.getModifiers()

    获取方法的修饰符(权限加特征)

    Class returnType = m.getReturnType()

    获取返回值数据类型

    String name = m.getName()

    获取方法名字

    Class[] parameterTypes = m.getParameterTypes()

    获取方法参数列表的类型

    Class[] exceptionTypes = m.getExceptionTypes()

    获取方法抛出异常的类型

    调用对象:
    Object result=method.invoke(对象,执行方法需要传递的所有参数...)
    若方法是私有方法 不允许操作
    可以设置setAccessable(true)  //设置方法使用权 准入
    
    Constructor类中的常用方法:
    con.getModifiers()//权限修饰符
    con.getName();
    con.getParameterTypes()
    con.getExceptionTypes()

    3.拓展

    如何操作构造方法
    执行一次 创建对象
    Object=newInstance(执行构造方法时的所有参数)
    con.setAccessible(true) 
    
    Spring: IOC控制反转 DI(依赖注入) AOC
          DI是IOC的体现
     IOC(Inversion Of Control)  对象的控制权反转
     DI(Dependency Injection)  对象的控制权是别人的 别人创建对象的同时 帮我们注入属性值的过程
  • 相关阅读:
    3372 选学霸
    3556 科技庄园
    1025 选菜
    UVA 437 The Tower of Babylon巴比伦塔
    3641 上帝选人
    tyvj P1175 机器人
    1692 子集和的目标值
    1689 建造高塔
    NOI2002 贪吃的九头龙
    NYOJ110 剑客决斗
  • 原文地址:https://www.cnblogs.com/zh93/p/13836632.html
Copyright © 2020-2023  润新知