Java反射详解--通过Class调用类中的指定构造函数

2014-11-24 08:56:43 · 作者: · 浏览: 1

演示代码如下:Car.java

[html]
package spjava;

public class Car {
private String brand;
private String color;
private int maxSpeed;

public Car(){

}

public Car(String brand){
this.brand = brand;
}

public Car(String brand,String color){
this.brand = brand;
this.color = color;
}

public Car(String brand, String color, int maxSpeed){
this.brand = brand;
this.color = color;
this.maxSpeed = maxSpeed;
}

public String getBrand() {
return brand;
}

public void setBrand(String brand) {
this.brand = brand;
}

public String getColor() {
return color;
}

public void setColor(String color) {
this.color = color;
}

public int getMaxSpeed() {
return maxSpeed;
}

public void setMaxSpeed(int maxSpeed) {
this.maxSpeed = maxSpeed;
}


}

测试类:

[java]
package spjava;

import java.lang.reflect.Constructor;

/**
*
* No:

* Description: 测试类

* @author LiYaoHua
* Copyright 2012 All rights reserved.

* Company www.riadu.com>
*
*/
public class Test {
public static void main(String[] args) {
Class< > clazz = null;
try {
clazz = Class.forName("spjava.Car");
} catch (Exception e) {
// TODO: handle exception
}
Car car1 = null;
Car car2 = null;
Car car3 = null;
Car car4 = null;
//取得所有构造函数
Constructor< > cons[] = clazz.getConstructors();
try {
car1 = (Car) cons[1].newInstance();
//国产不易啊来个国产的
car2 = (Car) cons[2].newInstance("红旗");
car3 = (Car) cons[0].newInstance("红旗","红色");
car4 = (Car) cons[3].newInstance("红旗","红色",200);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(car1);
System.out.println(car2);
System.out.println(car3);
System.out.println(car4);
}
}
这个主要利用了Class的getConstructors方法 JDK中是这样介绍的:

getConstructors
public Constructor< >[] getConstructors()
throws SecurityException
返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法。如果该类没有公共构造方法,或者该类是一个数组类,或者该类反映一个基本类型或 void,则返回一个长度为 0 的数组。 注意,此方法返回 Constructor 对象的数组(即取自此类构造方法的数组)时,此方法的返回类型是 Constructor< >[],不是 预期的 Constructor[]。此少量信息的返回类型是必需的,因为从此方法返回之后,该数组可能被修改以保存不同类的 Constructor 对象,而这将违反 Constructor[] 的类型保证。
返回:
www.2cto.com
表示此类公共构造方法的 Constructor 对象数组
抛出:
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
调用 s.checkMemberAccess(this, Member.PUBLIC) 拒绝访问该类中的构造方法
调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对 s.checkPackageAccess() 的调用拒绝访问该类的包


作者:struggle_lyh