跟着孙哥学Spring,b站:https://www.bilibili.com/video/BV185411477k/?spm_id_from=333.337.search-card.all.click
在Java中,我们可以使用反射来创建对象。这里有两种主要的方式:
1. 使用 Class.forName().newInstance()
方法
这种方式是使用默认的无参数构造函数来创建对象。如果这个类没有默认的无参数构造函数,那么这种方式会抛出异常。
Class<?> clazz = Class.forName("com.baizhiedu.User");
User newInstance = (User) clazz.newInstance();
2. 使用 Constructor.newInstance()
方法
这种方式是通过反射的方式获取类的构造函数,然后通过构造函数来创建对象。这种方式更加灵活,可以用来创建有参数构造函数的对象,也可以用来创建私有构造函数的对象。但是这种方式的代码更复杂,执行效率也比直接使用newInstance
方法低。
Class<?> clazz = Class.forName("com.baizhiedu.User");
Constructor<?> ctor = clazz.getDeclaredConstructor();
User user = (User) ctor.newInstance();
如果你需要创建的对象的构造函数有参数,或者构造函数是私有的,那么你需要使用Constructor.newInstance()
方法来创建对象。例如,如果你的构造函数需要一个String
类型和一个int
类型的参数,你可以这样做:
Constructor<?> ctor = clazz.getDeclaredConstructor(String.class, int.class);
User user = (User) ctor.newInstance("username", 25);
在这个例子中,newInstance
方法接收的参数应该与你在getDeclaredConstructor
方法中指定的参数类型相匹配。这样,你就可以创建具有任何你需要的构造函数的新对象了。