java中除了使用new来创建对象,还可以使用反射技术来创建对象。
首先获得类对象的class后,然后通过java的反射机制来创建对象,有两个方法,Class.neeInstance()以及调用类对象的构造方法来创建。
class.newInstance()来创建对象
测试类
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
class.newInstance()
public class ClassNewInstance {
public static void main(String[] args) throws IllegalAccessException, InstantiationException {
Person person = Person.class.newInstance();
person.setAge(18);
person.setName("likly");
System.out.println(person);
}
}
运行结果
Person{name='likly', age=18}
注意:Class.newInstance()默认调用的是无参构造函数来创建类对象的实例对象,所以要求person类中必须有无参构造函数,否则会出现异常
Caused by: java.lang.NoSuchMethodException: likly.java.reflect.Person.<init>()
使用类对象的构造方法来创建对象
使用Class.getConstructors()来获取所有构造函数
使用Class.getConstructor(Class…parameters)获取指定的构造函数
Class p =Person.class;
for(ConStructor con:p.getConstructors){
System.out.println(con);
}
public likly.java.reflect.Person()
public likly.java.reflect.Person(java.lang.String,int)
使用Class.getConstructor(Class…paramters)获取指定的构造方法,并创建对象
Class p =Person.class;
Constructor con = p.getConStructor(String.class,int.class);
Person person=(Person)con.newInstance(“xqm”,20);
System.out.println(person);
输出结果为
Person{name='Likly', age=23}