# 反射
反射:框架设计的灵魂
框架:半成品软件。可以在框架的基础上进行软件开发,简化编码
反射:将类的各个组成部分封装为其他对象
好处 :
- 可以在程序运行过程中,操作这些对象
- 可以解耦,提高程序的可扩展性
获取 Class 对象的方式 :
Class.forName ("全类名") : 将字节码文件加载进内存,返回 class 对象
多用于配置文件,将类名定义在配置文件中,读取文件,加载类
类名.class : 通过类名的属性 class 获取
多用于参数的传递
对象.getClass () : 此方法在 Object 类中定义
多用于对象的获取字节码的方式
- 结论 : 同一个字节码文件 (".class") 在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的 class 对象都是

# 使用 Class 对象
获取功能 :
获取成员变量
1
2
3
4
5Field[] getFields();
Field getField(String name);
Field[] getDeclaredFields();
Field getDeclaredField(String name);获取构造方法
1
2
3
4
5Constructor<?>[] getConstructor();
Constructor<?> getConstructor(类<?>... parameterTypes);
Constructor<?>[] getDeclaredConstructor();
Constructor<?> getDeclaredConstructor(类<?>... parameterTypes);获取成员方法
1
2
3
4
5Method[] getMethods();
Method getMethod(String name, 类<?>... parameterTypes);
Method[] getDeclaredMethods();
Method getDeclaredMethod(String name, 类<?>... parameterTypes);获取类名
1
String getName();
# Field : 成员变量
操作 :
设置值
1
void set(Object, Object value);
获取值
1
get(Object obj);
忽略访问权限修饰符的安全检查
1
setAccessible(true);
# Constructor : 构造方法
操作 :
