演示代码如下:Car.java
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;
}
}
测试类:
package spjava;
import java.lang.reflect.Constructor;
/**
*
* No: <br>
* Description: 测试类 <br>
* @author LiYaoHua
* Copyright 2012 All rights reserved.<br>
* Company www.riadu.com<br>
*
*/
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<T>
对象的数组(即取自此类构造方法的数组)时,此方法的返回类型是Constructor<?>[]
, 不是 预期的Constructor<T>[]
。此少量信息的返回类型是必需的,因为从此方法返回之后,该数组可能被修改以保存不同类的Constructor
对象,而这将违反Constructor<T>[]
的类型保证。 -
-
-
返回:
-
表示此类公共构造方法的
Constructor
对象数组
抛出:
-
SecurityException
- 如果存在安全管理器 s,并满足下列任一条件:- 调用
s.checkMemberAccess(this, Member.PUBLIC)
拒绝访问该类中的构造方法 - 调用者的类加载器不同于也不是当前类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
从以下版本开始:
- 调用
- JDK1.1
-
表示此类公共构造方法的