调构造器是用来造对象,造对象最常用的还是newInstance的方式(调用空参的构造器)
再采用针对属性的方法对属性进行操作
newInstance更能利用反射的动态性,我们更希望用反射写出更通用的功能,通用即指的是适合于各种情况
调用运行时类当中的指定构造器使用得比较少,因为并不通用。一般是针对某个具体的情况
比如说我们想调用Person类中的这个构造器
@MyAnnotation(value = "abc")
private Person(String name) {
this.name = name;
}
public class FieldTest {
@Test
public void test1() throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class clazz = Person.class;
//1.获取指定的构造器
//参数为可变参数,说明的是参数列表(说的是形参类型,因为也不靠形参名去区分不同的方法,而是形参类型)
Constructor constructor = clazz.getDeclaredConstructor(String.class);
//保证此构造器是可访问的
constructor.setAccessible(true);
//调用此构造器创建运行时类的对象
Object obj = constructor.newInstance("Tom");//此方法需要对应的参数
Person per=(Person)obj;
//调用Person中的toString方法
System.out.println(per);//Person{name='Tom', age=0, id=0}
}
}