构造器最大的作用:创建对象.
为什么使用反射创建对象,为什么不直接来new呢?
在框架中,提供给我们的都是字符串.
-----------------------------------------------------------
使用反射创建对象:
步骤:
1);找到构造器所在类的字节码对象.
2):获取构造器对象.
3):使用反射,创建对象
-----------------------------------------------------------
Constructor类:表示类中构造器的类型,Constructor的实例就是某一个类中的某一个构造器
常用方法:
public T newInstance(Object... initargs):如调用带参数的构造器,只能使用该方式.
参数:initargs:表示调用构造器的实际参数
返回:返回创建的实例,T表示Class所表示类的类型
如果:一个类中的构造器是外界可以直接访问,同时没有参数.,那么可以直接使用Class类中的newInstance方法创建对象.
public Object newInstance():相当于new 类名();
调用私有的构造器:Class clz = Person.class;
// 调用public Person()
Constructor con = clz.getConstructor();
// 调用构造器的newInstance方法来创建对象,并传入实参
con.newInstance();
System.out.println("=============");
// 调用public Person(String name)
con= clz.getConstructor(String.class);
con.newInstance("linwei");
System.out.println("=================");
//调用private Person(String name, int age)
con = clz.getDeclaredConstructor(String.class,int.class);
//设置当前构造器可以访问
con.setAccessible(true);
con.newInstance("linwei",22);
访问私有的成员:
必须先设置可访问的
对象setAccessible(true);
class Person {
public Person() {
System.out.println("无参构造器");
}
public Person(String name) {
System.out.println("构造器" + name);
}
private Person(String name, int age) {
System.out.println("构造器" + name + age);
}
}