Java反射实例化对象和常规方法实例化对象
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;
?}
}