Java-使用反射调用构造器创建对象

构造器最大的作用:创建对象.

为什么使用反射创建对象,为什么不直接来new?

在框架中,提供给我们的都是字符串.

-----------------------------------------------------------

使用反射创建对象:

步骤:

1);找到构造器所在类的字节码对象.

2):获取构造器对象.

3):使用反射,创建对象

-----------------------------------------------------------

Constructor<T>类:表示类中构造器的类型,Constructor的实例就是某一个类中的某一个构造器

常用方法:

public T newInstance(Object... initargs):如调用带参数的构造器,只能使用该方式.

参数:initargs:表示调用构造器的实际参数

返回:返回创建的实例,T表示Class所表示类的类型

如果:一个类中的构造器是外界可以直接访问,同时没有参数.,那么可以直接使用Class类中的newInstance方法创建对象.

public Object newInstance():相当于new 类名();

调用私有的构造器:

Class<Person> clz = Person.class;
// 调用public Person()
Constructor<Person> 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);
	}
}

 

版权声明:
作者:yfeer
链接:https://www.yfeer.com/855.html
来源:个人编程学习网
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>