# 反射

反射:框架设计的灵魂

框架:半成品软件。可以在框架的基础上进行软件开发,简化编码

反射:将类的各个组成部分封装为其他对象

好处 :

  1. 可以在程序运行过程中,操作这些对象
  2. 可以解耦,提高程序的可扩展性

获取 Class 对象的方式 :

  1. Class.forName ("全类名") : 将字节码文件加载进内存,返回 class 对象

    多用于配置文件,将类名定义在配置文件中,读取文件,加载类

  2. 类名.class : 通过类名的属性 class 获取

    多用于参数的传递

  3. 对象.getClass () : 此方法在 Object 类中定义

    多用于对象的获取字节码的方式

  • 结论 : 同一个字节码文件 (".class") 在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的 class 对象都是

image-20220402184018917

# 使用 Class 对象

获取功能 :

  1. 获取成员变量

    1
    2
    3
    4
    5
    Field[] getFields();
    Field getField(String name);

    Field[] getDeclaredFields();
    Field getDeclaredField(String name);
  2. 获取构造方法

    1
    2
    3
    4
    5
    Constructor<?>[] getConstructor();
    Constructor<?> getConstructor(类<?>... parameterTypes);

    Constructor<?>[] getDeclaredConstructor();
    Constructor<?> getDeclaredConstructor(类<?>... parameterTypes);
  3. 获取成员方法

    1
    2
    3
    4
    5
    Method[] getMethods();
    Method getMethod(String name, 类<?>... parameterTypes);

    Method[] getDeclaredMethods();
    Method getDeclaredMethod(String name, 类<?>... parameterTypes);
  4. 获取类名

    1
    String getName();

# Field : 成员变量

操作 :

  1. 设置值

    1
    void set(Object, Object value);
  2. 获取值

    1
    get(Object obj);
  3. 忽略访问权限修饰符的安全检查

    1
    setAccessible(true);

# Constructor : 构造方法

操作 :

更新于 阅读次数