• 反射。


    反射:

    先分析下Java代码在计算机中经历的阶段:

    第一阶段:我们写的Java程序,也就是类,xx.java 文件,通过javac编译后,成为 xx.class 的字节码文件,这个阶段是源代码阶段。

    第二阶段:xx.class文件,通过类加载器,将类的各种成员封装成class类对象,比如 成员变量放在Field数组中,构造方法放在Constructor数组中,成员方法放在Method数组中,这是Class类对象阶段

    第三阶段:我们就可以具体的创建对象了,进入Runtime  运行时阶段。

    反射:将类的各个组成部分封装成其他对象,这就是反射机制。

    好处:1、可以在程序运行过程中操作这些对象。2、解耦,提高程序可扩展性。

    获取字节码class对象的方式:

    1、Class.forName("全类名") :将字节码文件加载到内存,返回Class对象

      多用于配置文件,将类名定义在配置文件中。

    2、类名.class  :通过类名的属性class获取。

      多用于参数的传递。

    3、对象.getClass() .

      多用于对象的获取字节码的方式。

    Class对象功能:

     获取功能:

      获取成员变量们:

        Field[] getFields()      Field[] getField(String name)     获取public的成员

        Field[] getDeclaredFields()   Field[] getDeclaredField(String name)  获取所有的成员

        setAccessible(ture) 暴力反射,忽略访问修饰符的安全检查。

        操作: 设置值: void set(Object obj, Object value)  获取值:get(Object obj)

      获取构造方法们:

        Constructor<?>[] getConstructors() ..............

        操作:创建对象:T newInstance(Object...initargs) 如果用空参的构造方法,可以简化:

           用Class对象的newInstance 方法。

      获取成员方法们:

        Method[] getMethods() ............................

        操作:执行方法:Object invoke(Object obj,Object...args) 获取名称:String getName

  • 相关阅读:
    java运算符
    Java中的变量与常量
    java 的数据类型
    Windows Server 2012 R2上安装.Net4.6.1出错
    数据库面试基础知识整理
    C语言面试程序阅读整理
    C语言面试基础知识整理
    Android Studio工程项目打包成SDK(jar或aar格式)
    Android Studio 添加引用Module项目
    Android Studio打包SDK后,为什么没有bundles文件夹?
  • 原文地址:https://www.cnblogs.com/zhangyuhao/p/10914694.html
Copyright © 2020-2023  润新知