java 反射

  1. Class类

    在程序运行期间,Java运行时系统始终为所有的对象维护一个被称为运行时的类型标识。这个信息跟踪着每个对象所属的类。虚拟机利用运行时类信息选择相应的方法执行。保存这些信息的类称为Class。实际上Class对象表示的是一种类型,而这个类型未必是一种类。如int不是类,但int.class是一个Class类型的对象。

    • getClass()返回一个Class类型的实例
    • Class.forName(className)返回类名对应的class对象
    • 虚拟机为每个类型管理一个Class对象,因此可以使用==运算符来实现两个类对象比较。如employee.getClass==Employee.class
    • 可以使用newInstance()来动态创建一个类的实例。如e.getClass().newInstance();newInstance方法调用默认的构造器,如果这个类没有默认的构造器,就会抛出一个异常。可以将forName和newInstance()结合起来使用,根据字符串表示的类名来创建一个对象。
  2. 利用反射来分析某个类

    在反射包中有三个类:Field、Method、Construcotr,分别用了描述类的字段、方法和构造器。通过这个三个类,可以对某个类中的所有方法和构造器以及字段进行分析。

  3. 利用反射分析运行中的某个类