您好,我想问一个问题,为什么我在学类的反射时,在类中加入成员方法,在主函数中按声明顺序调用构造方法(getDeclaredConstructor)时就按照声明的反顺序输出了,我是小白,您能帮忙解答一下吗?
package com.li ;
public class MoreConstructor {
/*
* @author
* */
//通过Class反射调用结构体类型
String s;
int i,i1,i2;
//调用位置字符串的构造体方法
//无参数的构造类型
public MoreConstructor(){
System.out.println("这是调用无参数的构造方法");
}
//调用有两个参数的构造体方法
public MoreConstructor(String srt,int num){
System.out.println("这是调用有两个参数的构造体方法");
}
public MoreConstructor(String...strings) throws NumberFormatException {
if(0<strings.length){
i=Integer.valueOf(strings[0]);
}else if(1<strings.length){
i1=Integer.valueOf(strings[1]);
}else if(2<strings.length){
i2=Integer.valueOf(strings[2]);
}
}
public void f(){
}
}
++++++++++这是一条分割线+++++++++++++++++++++++++++
package com.li
;
import java.lang.Class;
import java.lang.reflect.Constructor;
public class Texterror {
/*
* 用来测试的类
* */
//编写主函数
public static void main(String[] args)throws ClassNotFoundException {
//创建调用结构体类的对象
Class<?> classzz=Class.forName("com.li
.MoreConstructor");
Constructor<?>[] constructor=classzz.getDeclaredConstructors();
for(int i=0;i Constructor> con=constructor[i];
System.out.print("构造体名称为"+"\t");
System.out.println(con);
Class[] parameter=con.getParameterTypes();
System.out.print("该构造体入口参数依次为"+"\t");
for(int j=0;j<parameter.length;j++){
System.out.print(parameter[j]+" ");
}
System.out.println("\n"+"============================");
Class[] exception=con.getExceptionTypes();
System.out.print("构造体可能抛出异常的参数为"+"\t");
for(int j=0;j<exception.length;j++){
System.out.print(exception[j]+" ");
}
System.out.println("\n"+"**********************************");
}
}
}
java编译器在编译的时候,成员的顺序是不一定按照定义的顺序来的,谁也没说反射的顺序必须和定义的相同。
这玩意有顺序? 以前一直以为是随机性的。。。。楼主的结论确认了没? 一直都是反方向?