反射
反射:
在运行状态中,通过类的Class,调用它的任意方法和属性。
Class获取方式:
- 通过字面量直接获取,如Class clazz = Person.class , 未完成初始化
- 通过Object类的getClass方法,如Class clazz = Person.getClass(),已完成初始化
- 通过Class的静态方法forName(), 如Class clazz = Class.forName("com.orbc.Person"),已完成初始化
调用:Field、Constructor、Method等
Class clazz = Person.class;
// 获取 Constructor (无参构造)
Constructor constructor = clazz.getDeclaredConstructor();
// 获取 Field
Field field = clazz.getDeclaredField("属性名称");
// 获取 Method (无参方法)
Method method = clazz.getDeclaredMethod("方法名称");
// 获取值
Person target = (Person)constructor.newInstance();
Object object = field.get(target);
Object returnObject = method.invoke(target);机制
机制(使用了CAS):
获取 Field、Constructor、Method等,
缓存中不存在或者被垃圾回收:创建新的并放到缓存中
缓存中存在:从缓存中获取
缓存使用:SoftReference 软引用,如果内存满了,将软引用垃圾回收

浙公网安备 33010602011771号