zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Android 采用HttpClient提交数据到服务器
    Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.解决办法
    Android 字符乱码问题的处理
    Android 网络HTML查看器
    Android消息机制入门
    Android ANR产生的原理和如何避免
    Android 网络图片查看器
    Ubuntu下使用Git和GitHub
    定制保存top输出信息的格式详解
    linux的top命令参数详解
  • 原文地址:https://www.cnblogs.com/zhenzhunaichabujiatang/p/13627577.html
Copyright © 2011-2022 走看看