一文带你了解Java的反射机制到底是怎么一回事?

188 阅读1分钟

Java属于半动态语言,即程序运行时可以改变其结构,新的函数可以引进,旧的函数可以删除。而且,在运行状态中,任意一个类都能知道这个类的所有属性和方法,并且对任意一个对象,都能调用他的任意一个方法

反射的应用场合

程序运行时可以收到外部传入的对象,这个对象在编译时类型可以是Object,由此无法预知该对象到底属于哪个类,在运行时,为了发现这个对象的真实信息,就需要用反射机制了。

反射API

  • Class
  • Field
  • Method
  • Constructor

反射使用步骤

  1. 获取想要操作的类的Class对象,通过Class对象我们就可以调用任意类的方法

    获取Class对象的三种方法

    • 调用对象的getClass()
      Person p = new Person();
      Class c = p.getClass();
      
    • 调用class属性
        Class c = Person.class;
    
    • 使用forName()静态方法 (最安全)
    // 括号里填对于类的路径
        Class c = Class.forName("reflection.Person");
    
  2. 调用Class类的方法,这就是反射的使用阶段
  3. 使用反射API操作

创建对象的两种方法

  1. 调用Class对象的newInstance()方法: 当类的Constructor为空时
    Class c = Class.forName("reflection.Person");
    Person p = (Person) c.newInstance()
    
  2. 先获取Class的指定Constructor,再调用Constructor的newInstance()方法:当类的Constructor不为空时
    Class c = Class.forName("reflection.Person");
    Consturctor cons = c.getDeclaredConstructor(String.class,String.class);
    Person p = (Person) c.newInstance("小明","男");