初学JAVA,在做反射的练习的时候遇到个问题,研究了半天没果,前来求助,望高手指教代码如下:public class ReflectConstructor {
String str;
int i1;
int i2;
int i3;//三个不同的构造方法
private ReflectConstructor() {
} protected ReflectConstructor(String str, int i) {
this.str = str;
this.i1 = i;
} public ReflectConstructor(String... str) throws NumberFormatException {
if (str.length > 0) {
this.i1 = Integer.parseInt(str[0]);
}
if (str.length > 1) {
this.i2 = Integer.parseInt(str[1]);
}
if (str.length > 2) {
this.i3 = Integer.parseInt(str[2]);
}
}//输出成员变量
public void print() {
System.out.println("str=" + str);
System.out.println("i1=" + i1);
System.out.println("i2=" + i2);
System.out.println("i3=" + i3);
}
}//另一个类中的主方法,通过反射访问上面这个类
import java.lang.reflect.*;public class ReflectConstructorMain {
public static void main(String[] args) {
ReflectConstructor reflectConstructor = new ReflectConstructor("10",
"20", "30");
Class<? extends ReflectConstructor> reflectConstructorC = reflectConstructor
.getClass();
Constructor<?> declaredConstructor[] = reflectConstructorC
.getDeclaredConstructors();
for (int i = 0; i < declaredConstructor.length; i++) {
System.out.println("是否为可变数量的参数的构造方法:"
+ (declaredConstructor[i].isVarArgs() ? "是" : "否"));
System.out.println("改构造方法的入口参数类型依次为:");
Class<?> parameterTypes[] = declaredConstructor[i]
.getParameterTypes();
for (int j = 0; j < parameterTypes.length; j++) {
System.out.println("  " + parameterTypes[j].getName());
}
System.out.println("该构造方法可能抛出的异常类型为:");
Class<?> exceptionTypes[] = declaredConstructor[i]
.getExceptionTypes();
for (int j = 0; j < exceptionTypes.length; j++) {
System.out.println("  " + exceptionTypes[j].getName());
}
ReflectConstructor reflectConstructor2 = null;
while (reflectConstructor2 == null) {
try {
switch (i) {
case 0:
reflectConstructor2 = (ReflectConstructor) declaredConstructor[i]
.newInstance();
case 1:
reflectConstructor2 = (ReflectConstructor) declaredConstructor[i]
.newInstance("5", 7);

case 2:
Object varParameters[] = new Object[] { new String[] {
"100", "200", "300" } };
reflectConstructor2 = (ReflectConstructor) declaredConstructor[i]
.newInstance(varParameters);
//这两行老是抛出IllegalArgumentException错误,内容是wrong number of arguments,不知是何原因,并求解决方法 }
} catch (Exception err) {
err.printStackTrace();
System.out.println("在创建对象时抛出异常,下面执行setAccessible()方法");
declaredConstructor[i].setAccessible(true);
}
}
reflectConstructor2.print();
System.out.println();
}
}
}