Java进阶之反射

Java进阶之反射

Java进阶之反射

编程语言的分类

  • 动态语言
    • 在程序运行时,可以对变量进行修改数据类型,数据值、对象、属性、方法等
  • 非动态语言
    • Java、C++、C等

反射技术

    • Java不是动态语言
    • 在Java语言中,可以使用反射技术实现动态语言的部分特征
    • 在程序运行时,可以实现动态分析类的能力、称为反射
      • 比如在程序运行时,可以根据类名(字符串)加载这个类
      • 可以获得某个类的信息(元数据)
        • 类名称(全路径)
        • 属性
        • 修饰符
        • 方法
      • 可以实现动态调用一个对象的所有方法,包括private
    • Class类 -- 代表加载到Java虚拟机中的类实例
      • 获取Class实例
        • Class class = 类名.class
        • Class class = Class.forName("类的全路径,以字符串形式出现")
        • Class class = 对象.getClass()
    • Class常用方法
      • 加载类 forName()
      • 获取类名(全路径) getName()
      • 获取类源代码中的简称 getSimpleName()
      • 获取父类的类实例 getSuperClass()
      • 确定此对象所实现的接口 getInterfaces()
      • 是否是某种类型的实例 is?()
      • 获取当前类的修饰符(以整数编码) getModifiers()
      • 将获取的整数编码的类修饰符转换成字符串 Modifier.toString(A.getModifiers())
      • Class获得Field
        • Field代表的是Class实例中的属性对象
        • 可以使用Class实例调用方法来获得Field对象中的属性
          • 参数name为指定属性名称 getField(String name) 将属性生成对象并返回
          • 返回类实例中,所有的属性对象 返回的是Field数组getFields()
          • field.set(person,"name")
          • 获取当前对象的值 get(Object obj)
          • 获取属性的类型 getType()
          • 获取类实例中全部属性,包括私有属性 getDeclaredField()
          • 访问权限,为true可以访问私有属性 setAccessible(true)
      • Class获得Constructor
        • Constructor代表构造器
        • 执行流程
          • 加载Class类实例
          • 执行静态
          • 执行非静态
          • 创建对象空间
          • 执行构造器
          • 返回对象地址给引用
        • 获取构造器
          • Class class = A.class;
          • Constructor constructor = class.getConstructor(Integer.class,String.class) -- 参数为类实例
          • Constructor[] constructors = class.getConstructors()
          • getDeclaredConstructor()
          • getDeclaredConstructors()
        • 使用构造器创建一个真实的对象
        • Object object = constructor.newInstance(100,"hello")
      • Class获得Method
        • Method代表的是方法
        • 获取Method方法
          • 返回指定公共的函数对象
          • 返回一个Method对象,获取指定的方法 getMethod(String Class< ? >...praters)
          • String表示方法名,第二个参数表示可变参数
          • 返回所有的函数对象
          • getMethods 返回Method[]
          • 返回指定的任意对象函数,包括非公有
          • getDeclaredMethod()
        • 返回所有的函数对象,包括非公有
        • getDeclaredMethods()
      • 在Method中,有一个方法 invoke()
      • Object invoke(Object Object...parameters)
        • 第一个参数,将要调用哪个对象下的此Method方法
        • 第二个参数,Object...object,代表调用此Method所传递的实参
        • 它返回一个Object类型的返回值,如果没有返回值,则返回一个null;
      • 常用API
        • 返回函数名称
        • getName()
        • 返回函数的返回值类型
        • getReturnType()
        • 返回函数的形参列表
        • getParameterTypes()
        • 返回函数的修饰符
        • method.getModifiers()
        • 设置权限,可以调用非公有成员函数
        • setAccessible(boolean)
如有问题,请发送邮件至buxiaqingcheng@163.com或者buxiaqingcheng@dingtalk.com
原文地址:https://www.cnblogs.com/zhenzhunaichabujiatang/p/13627577.html