反射获取一个类的构造方法
public class Student extends Person implements Move,Study {
String school;
public Student() {
}
public Student(String school) {
this.school = school;
}
private Student(String name,int age) {
this.age=age;
}
public void showInfo(){
System.out.println("学校是:"+this.school);
}
@Override
public void moveType() {
System.out.println("骑自行车上学!");
}
@Override
public void studyInfo() {
System.out.println("学习的是中学的知识!");
}
}
public class Test01 {
public static void main(String[] args) {
try {
Class clazz=Class.forName("com.reflex.cla.Student");//Class.forName(包名.类名)方法获取指定类的class实例
Class superclass = clazz.getSuperclass();//获取父类
System.out.println("父类 = "+superclass.getName());
Class[] interfaces = clazz.getInterfaces();//获取当前类的所有接口
for (Class anInterface : interfaces) {
System.out.println("接口 = " + anInterface.getName());
}
Constructor[] cons = clazz.getConstructors();//获取类的公有的构造方法
for (Constructor con : cons) {
System.out.println("构造方法名称 = " + con.getName());//getName()取得方法的名称
//getModifiers()取得方法的修饰符,返回数字1代表public
System.out.println("构造方法名称 = " + con.getName()+"的修饰符是:"+con.getModifiers());
Class[] parameterTypes = con.getParameterTypes();
for (Class parameterType : parameterTypes) {
System.out.println("构造方法名称 = " + con.getName()+"的参数类型是:"+parameterType.getName());
}
}
System.out.println("====================================");
Constructor[] conts = clazz.getDeclaredConstructors();//获取类的所有的构造方法
for (Constructor cont : conts) {
System.out.println("---------------------");
System.out.println("构造方法名称 = " + cont.getName());//getName()取得方法的名称
//getModifiers()取得方法的修饰符,返回数字1代表public,返回数字2代表private
System.out.println("构造方法名称 = " + cont.getName()+"的修饰符是:"+cont.getModifiers());
Class[] parameterTypes = cont.getParameterTypes();//获取构造方法的参数类型,有几个参数数组元素就有几个
for (Class parameterType : parameterTypes) {
System.out.println("构造方法名称 = " + cont.getName()+"的参数类型是:"+parameterType.getName());
}
System.out.println("---------------------");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}