首先说答案:肯定是调用的
背景
今天在群里看到一个人问问题,说自己的反射创建类为什么没有走构造函数,然后群里就有个人说反射不走构造函数,这个回答肯定是错的,可能他的意思是不走他的有参构造函数,因为问问题人写的类中只有一个有参构造。我们不过分揣摩,先写个例子证明是走构造函数的。
直接上代码
我们先写一个简单的类User
public class User {
private String name;
private Integer age;
public User() {
System.out.println("无参");
}
public User(String name, Integer age) {
System.out.println("有参");
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
我们这里分别给一个无参,一个有参的构造函数,无参必须要有的,不然发射的时候出报错。
下面测试一下
User user = User.class.getConstructor(String.class,Integer.class).newInstance("张三",12);
User user2 = User.class.newInstance();
运行结果是
有参
无参
我们可以看到是输出个构造函数中的输出字符的,所以反射创建类是会走构造函数的。