调试代码发现一个常出现的问题:
for循环的不同输出结果也不一样
package reflacetin;
import java.awt.*;
import java.lang.reflect.Constructor;
public class ShowReflection {
public static void main(String args[]) {
// cc=Point.class的结构体
Constructor[] cc = Point.class.getConstructors();
// 返回两个参数,第一个是指返回的为一个反射的构造器,第二个参数是返回,返回的内容是Point类中point方法不同个数
// System.out.println(cc);
// System.out.println(cc[0]);
// System.out.println(cc[1]);
// System.out.println(cc[2]);
// System.out.println(cc.length);
// 重新定义一个结构体
Constructor cons = null;
// 不加{}的for循环其实不会走到最后一步
for (int i = 2; i < cc.length; i--) {
// 注释的返回值为2
System.out.println(cc[i].getParameterCount());
cons = cc[i];
System.out.println(i);
try {
Object obj = cons.newInstance(
// 新建一个对象,这个对象是没有参数名的,这里实际的入参还是两个
new Object[]{
new Integer(3), new Integer(4)
}
);
System.out.println(obj);
} catch (Exception e) {
System.out.println("Exception:" + e.getMessage());
}
}
}
}
输出:
0 2 Exception:wrong number of arguments 1 1 Exception:wrong number of arguments 2 0 java.awt.Point[x=3,y=4]
如果代码改成:
输出:
package reflacetin;
import java.awt.*;
import java.lang.reflect.Constructor;
public class ShowReflection {
public static void main(String args[]) {
// cc=Point.class的结构体
Constructor[] cc = Point.class.getConstructors();
// 返回两个参数,第一个是指返回的为一个反射的构造器,第二个参数是返回,返回的内容是Point类中point方法不同个数
// System.out.println(cc);
// System.out.println(cc[0]);
// System.out.println(cc[1]);
// System.out.println(cc[2]);
// System.out.println(cc.length);
// 重新定义一个结构体
Constructor cons = null;
// 不加{}的for循环其实不会走到最后一步
for (int i = 2; i < cc.length; i--) {
// 注释的返回值为2
// System.out.println(cc[i].getParameterCount());
if(cc[i].getParameterCount()==2)
cons = cc[i];
// System.out.println(i);
try {
Object obj = cons.newInstance(
// 新建一个对象,这个对象是没有参数名的,这里实际的入参还是两个
new Object[]{
new Integer(3), new Integer(4)
}
);
System.out.println(obj);
} catch (Exception e) {
System.out.println("Exception:" + e.getMessage());
}
}
}
}
Exception:null
Exception:null
java.awt.Point[x=3,y=4]
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at reflacetin.ShowReflection.main(ShowReflection.java:23)