通常,创建实例是这样子的:
Person p = new Person();
用反射来创建实例的话,是这样子的:
Person p = Person.class.newInstance();
通过Class.newInstance()
的局限是:只能调用该类的public无参数构造方法(有参数或者非public都不能调用)
通过反射调用实例,为了能够调用任意的构造方法,可以使用Constructor
对象。Constructor
是一个构造方法,并且调用结果总是返回实例。
import java.lang.reflect.Constructor;
public class Test {
public static void main(String[] args) throws Exception {
Constructor cons = Person.class.getConstructor(String.class, int.class);
Person p = (Person) cons.newInstance("thrfur", 1);
Constructor cons1 = Person.class.getConstructor(String.class);
Person p1 = (Person) cons1.newInstance("thrfur.com");
Constructor cons2 = Person.class.getConstructor(int.class);
Person p2 = (Person) cons2.newInstance(2);
System.out.println(p.getAge() +"岁 "+ p.getName());
System.out.println(p1.getName());
System.out.println(p2.getAge() + "岁");
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(String name) {
this.name = name;
}
public Person(int age) {
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
}
运行结果:
1岁 thrfur
thrfur.com
2岁