反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应的方法。反射的 api 在 java.lang.reflect

操作原理

在运行的时候通过对象去得到它的字节码,用于操作对象。

所有的字节码都是 Class 的对象。

获得类对象的三种方法

一、类名.class
二、对象.getclass()
使用这种必须确保对象有空构造器。
三、class.forName(“包名.类名”)

暴力访问

使 private 属性的构造器、方法、field 能够被访问。

  1. Constructor<Users> us = clazz.getDeclaredConstructor(String.class);
  2. //设置暴力访问
  3. boolean access = us.isAccessible();
  4. us.setAccessible(true);
  5. Users uu = us.newInstance("hello");
  6. us.setAccessible(access);