1.一个car类
package java_foundation.test_reflect;
public class Car {
private String brand;
private String color;
private int maxSpeed;
/**
* 创建一个新的实例Car.
*
*/
public Car() {
}
/**
* 创建一个新的实例Car.
*
* @param brand
* @param color
* @param maxSpeed
*/
public Car(String brand, String color, int maxSpeed) {
super();
this.brand = brand;
this.color = color;
this.maxSpeed = maxSpeed;
}
public void introduce() {
System.out.println("brand:"+brand+";color:"+color+";maxSpeed:"+maxSpeed);
}
public String getBrand() {
return this.brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getColor() {
return this.color;
}
public void setColor(String color) {
this.color = color;
}
public int getMaxSpeed() {
return this.maxSpeed;
}
public void setMaxSpeed(int maxSpeed) {
this.maxSpeed = maxSpeed;
}
}
2.用两种方式实例化对象
package java_foundation.test_reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
@SuppressWarnings(value={"unchecked","rawtypes"})
public class RelectTest {
/**
* @creationDate. 2013-7-20 上午12:11:14
* @param args
*/
public static void main(String[] args) throws Throwable{
// TODO Auto-generated method stub
Car carA = initByCommon();
carA.introduce();
Car carB = initByDefaultConstructor();
carB.introduce();
}
/**
* 常规实例化对象
* @creationDate. 2013-7-20 上午12:42:52
* @return
*/
public static Car initByCommon(){
Car car = new Car();
car.setBrand("红旗A");
car.setColor("红色");
car.setMaxSpeed(300);
return car;
}
/**
* 通过反射实例化对象
* @creationDate. 2013-7-20 上午12:43:29
* @return
* @throws Throwable
*/
public static Car initByDefaultConstructor() throws Throwable{
// 获取类对象
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class clazz = loader.loadClass("java_foundation.test_reflect.Car");
// 获取构造器对象
Constructor cons = clazz.getDeclaredConstructor((Class[])null);
// 获得实例化对象
Car car = (Car)cons.newInstance();
// 获得反射方法
Method setBrand = clazz.getMethod("setBrand", String.class);
// 调用实例对象的相应方法
setBrand.invoke(car, "红旗B");
// 同理
Method setColor = clazz.getMethod("setColor", String.class);
setColor.invoke(car, "黑色");
// 同理
Method setMaxSpeed = clazz.getMethod("setMaxSpeed", int.class);
setMaxSpeed.invoke(car, 200);
return car;
}
}