Java,反射创建对象的两种方式

发布时间 2023-12-26 10:21:11作者: zzusjw

跟着孙哥学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方法中指定的参数类型相匹配。这样,你就可以创建具有任何你需要的构造函数的新对象了。