创建运行时类的对象
方法:调用Class对象的newInstance()方法;
要求:
- 类必须有一个无参构造器.
- 类的构造器访问权限要足够.
//获取运行时类的Class对象clazz
Class clazz=Person.class;
//现在我们可以用clazz去查看Person(照镜子,反射)中的一切
//本章是创建运行时类的对象,我们就去看构造器
//调用getDeclaredConstructors()方法获取Person所有的构造器,然后报存在数组里面
Constructor[]declaredConstructors=clazz.getDeclaredConstructors();
//使用增强for循环输出Person类所有的构造器
for (Constructor c:declaredConstructors){
System.out.println(c);
}
输出结果为:
private first.Person(java.lang.String); 一个带String类型的参数构造器;
public first.Person(java.lang.String,int) ; 一个带String和int两个参数的构造器;
public first.Person(); 一个空参构造器;
记住构造器就是来造对象的,那我们可以用上面获取的Person构造器来造对象:
-
确定使用哪一个构造器,使用getConstructor()方法明确构造器:(构造器一定要是Person(运行时类中有存在的))
//我采用的是上面输出的第二个构造器 Constructor<Person> constructor = clazz.getConstructor(String.class, int.class);
-
然后使用构造器来创建对象,使用newInstance()
Person p1 = constructor.newInstance("小米",5999); System.out.println(p1); //Person{name='小米', age=5999}
我本人学到这里有点懵逼了,我就这样理解,运行时类Person照镜子,在镜子里面有两个角色,一个是作为一个对象,Person是对象了,他属于Class这个类.Class clazz=Person.class.
然后呢,作为一个类,类里面有很多东西,构造器,方法,属性,注解等很多东西,我们就把Person当做一个类来使用,形式上是对象clazz来调用方法.就用clazz来获取(确定)构造器,然后造对象.
咋越说越复杂…大概逻辑差不多了吧…