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

来源:互联网 发布:黑暗之光披风升阶数据 编辑:程序博客网 时间:2024/06/05 16:10

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

为什么使用反射创建对象,为什么不直接来new呢?
在框架中,提供给我们的都是字符串.
-----------------------------------------------------------
使用反射创建对象:
步骤:
    1);找到构造器所在类的字节码对象.
    2):获取构造器对象.
    3):使用反射,创建对象
-----------------------------------------------------------
Constructor<T>类:表示类中构造器的类型,Constructor的实例就是某一个类中的某一个构造器
常用方法:
public T newInstance(Object... initargs):如调用带参数的构造器,只能使用该方式.
     参数:initargs:表示调用构造器的实际参数
     返回:返回创建的实例,T表示Class所表示类的类型

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

 public Object newInstance():相当于new 类名();调用私有的构造器

import java.lang.reflect.Constructor;import org.junit.Test;/** *  * 说明:反射调用构造函数创建对象实例 * */public class NewInstanceDemo {@Testpublic void testNewInstance() throws Exception {Class<Person> pClass = Person.class;Constructor<Person> con = pClass.getConstructor();//调用public Person()con.newInstance();//公共的无参构造System.out.println("================================");Constructor<Person> con2 = pClass.getConstructor(String.class);//调用public Person(String name)con2.newInstance("杨哥");//公共的有参构造:杨哥System.out.println("================================");Constructor<Person> con3 = pClass.getDeclaredConstructor(int.class,String.class);//调用private Person(int age, String name)con3.setAccessible(true);con3.newInstance(18,"杨哥");//私有的有参构造:age=18,name=杨哥System.out.println("================================");//如果一个类中有公共的无参数构造器,那么可以使用一下方式创建对象pClass.newInstance();//公共的无参构造}}
注意:访问私有的成员:必须先设置可访问的对象setAccessible(true);



阅读全文
0 0
原创粉丝点击