美文网首页
JAVA 反射

JAVA 反射

作者: 熊熊要更努力 | 来源:发表于2017-08-17 15:58 被阅读9次

    Java让我们在运行时识别对象和类的信息,主要有2种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息;另一种是反射机制,它允许我们在运行时发现和使用类的信息。


    Class反射机制

    • 指的是可以于运行时加载,探知和使用编译期间完全未知的类.
    • 程序在运行状态中, 可以动态加载一个只有名称的类, 对于任意一个已经加载的类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能调用他的任意一个方法和属性;
    • 加载完类之后, 在堆内存中会产生一个Class类型的对象(一个类只有一个Class对象), 这个对象包含了完整的类的结构信息,而且这个Class对象就像一面镜子,透过这个镜子看到类的结构,所以被称之为:反射。
    • 每个类被加载进入内存之后,系统就会为该类生成一个对应的java.lang.Class对象,通过该Class对象就可以访问到JVM中的这个类.

    class 对象的获取

    • 对象的getClass()方法;
    • 类的.class(最安全/性能最好)属性;
    • 运用Class.forName(String className)动态加载类,className需要是类的全限定名(最常用).

    通过反射来生成对象的方式有两种:

    • 使用Class对象的newInstance()方法来创建该Class对象对应类的实例(这种方式要求该Class对象的对应类有默认构造器).
    • 先使用Class对象获取指定的Constructor对象, 再调用Constructor对象的newInstance()方法来创建该Class对象对应类的实例(通过这种方式可以选择指定的构造器来创建实例).
      通过第一种方式来创建对象比较常见, 像Spring这种框架都需要根据配置文件(如applicationContext.xml)信息来创建Java对象,从配置文件中读取的只是某个类的全限定名字符串,程序需要根据该字符串来创建对应的实例,就必须使用默认的构造器来反射对象.

    相关文章

      网友评论

          本文标题:JAVA 反射

          本文链接:https://www.haomeiwen.com/subject/txqnrxtx.html