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); } }
共有 0 条评论