什么是反射?

🐵 #面试 #JinXD

反射概念:
  • 反射就是 把Java类中的 各个成分 映射成一个个的Java对象;
  • 在运行状态中,对于任意一个类,都能够知道这个类的所有的 属性和方法;
  • 对于任意一个对象,都能调用它的任意一个方法和属性;
  • 这种 动态 获取对象属性及 动态 调用对象方法的功能叫Java的反射机制。

    反射的功能:
  • ⭐在运行时构造(获取)任意一个类的对象;

  • ⭐在运行时调用任意一个类的对象的 方法;
  • 在运行时判断任意一个对象所属的类;
  • 在运行时判断任意一个类所具有的成员变量和方法。

    实现反射功能的类:
  • Class:这个类;

  • Field:类的成员变量;
  • Method:类的方法;
  • Constructor:类的构造方法。

反射存在的必要性:

  • 使用new相当于在编译时写死了;
  • 使用 反射 可以在运行时动态获取对象。

反射用法及其实例:

测试对象Student student

  • 获取一个学生的对象的数据类型(此处是Student):

    1. Class studentClass = student.getClass();
  • 获取这个类型中声明的属性们:

    1. Field[] fields = studentClass.getDeclaredFields();
  • ⭐通过反射创建一个对象:

    1. 获取到这个对象的数据类型;
    2. 通过.newInstance()方法获取一个对象。
      1. Object newStudent = studentClass.newInstance(); //需要这个类存在无参构造器
      2. Object newStudent2 = studentClass.getConstructor(String.class ,int.class).newInstance(); //使用类中的构造器获得对象
  • 通过反射来执行类方法:

    1. Method method = studentClass.getMethon("methonName",?); //获取名字叫 methonName 的方法
    2. method.invoke(newStudent); //执行

反射机制的优缺点:

优点:

  • 灵活

缺点:

  • 无视泛型检查(泛型检查发生在编译时);
  • 性能稍差。