一、使用反射创建对象
通过反射来生成对象有如下两种方式:
方式一:
使用 Class 对象的 newInstance() 方法来创建 Class 对象对应类的实例,这种方法要求该 Class 对象的对应类有默认构造器,而执行 newInstance() 方法实际上是利用默认构造器来创建该类的实例。
方式二:
先使用 Class 对象获取指定的 Constructor 对象,再调用 Constructor 对象的newInstance(Object... args) 方法来创建该 Class 对象对应类的实例。通过这种方式可以选择使用某个类的指定构造器来创建实例。
通过第一种方式来创建对象是比较常见的情形,因为很多 JavaEE 框架中都需要根据配置文件信息来创建实例对象,从配置文件读取的只是某个类的字符串类名,程序就需要根据该字符串来创建对应的实例,就必须使用反射。
代码示例:
1 importjava.lang.reflect.Constructor;2
3 importorg.junit.Test;4
5 public classTestNewInstance {6 @Test7 public void test1() throwsException{8 Class> clazz = Class.forName("com.ks.reflect.Student");9 Object obj =clazz.newInstance();10 System.out.println(obj);11 }12
13 @Test14 public void test2() throwsException{15 Class> clazz = Class.forName("com.ks.reflect.Student");16 Constructor> constructor = clazz.getDeclaredConstructor(String.class);17 Object obj = constructor.newInstance("张三");18 System.out.println(obj);19 }20 }21 classStudent{22 privateString name;23
24 publicStudent(String name) {25 super();26 this.name =name;27 }28
29 publicStudent() {30 super();31 }32
33 @Override34 publicString toString() {35 return "Student [name=" + name + "]";36 }37 }
二、获取或设置某个对象的属性值
通过 Class 对象的 getFields() 等方法可以获取该类所包括的全部 Field(属性)或指定 Field。
而Field类除了提供获取属性的修饰符、属性类型、属性名等方法外,还提供了如下两组方法来访问属性:
public xxx getXxx(Object obj):获取obj对象该Field的属性值
public void setXxx(Object obj,Xxx value):设置obj对象该Field的属性值为value。
此处的XXX 对应 8 种基本数据类型,如果该属性的类型是引用数据类型,则直接使用get(Object o