1.通过反射机制创建对象过程
cagegory类:
public class cagegory {
private Integer id;
private String name;
//自行脑补set get 方法.
}
cagegory对象的创建:
//获取当前进程的类加载器
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class clazz = loader.loadClass("jzx.bean.cagegory");
//获取类的默认构造器对象并调用 构造该对象
Constructor cons = clazz.getDeclaredConstructor(null);
cagegory cage = (cagegory)cons.newInstance();
Method setName = clazz.getMethod("setName", String.class);
setName.invoke(cage, "盖伦");
Method setId = clazz.getMethod("setId", Integer.class);
setId.invoke(cage, 3);
//获取 类的成员变量类
Field id = clazz.getDeclaredField("id");
//当成员变量是 private时,使用setAccessible方法略过JVM安全检查。
id.setAccessible(true);
id.set(cage, 7);
System.out.println(cage.toString());
额外解读:
每次运行JVM时,都会产生三个加载器:分别是 根加载器(ClassLoader),扩展类加载器(ExtClassLoader) 和 系统类加载器(AppClassLoader)。
默认使用的是 系统类加载器,它是扩展类加载器的子类,扩展类加载器又是 根加载器的子类,但是根加载器是c++编写的,在java中访问不能。
原文:https://www.cnblogs.com/bigAssBoy/p/12707176.html