zoukankan      html  css  js  c++  java
  • 反射。

    反射:

    先分析下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 Singleton 单例模式
    深度解析Java内存的原型及工作原理
    使用Spring管理数据源连接池
    Java中用内存映射处理大文件
    基于Java阻塞队列的搜索实例
    Java学习之将图片文件保存到数据库
    Java使用反射调用方法
    Java程序员易犯的10个SQL错误
    Hibernate中的数据库增改删查操作
  • 原文地址:https://www.cnblogs.com/zhangyuhao/p/10914694.html
Copyright © 2011-2022 走看看