反射之构造方法简介
构造方法在调用的过程中首先会受到权限修饰符的约束,如果是public,类外也可以通过构造方法创建对应的类对象,如果是私有化的构造方法,只能在类内的方法中调用该构造方法,但是构造方法选择和【参数】有直接关系,而构造方法的名字是固定的,就是当前的类名;构造方法是依赖,参数类型区分的;根据参数的类型,个数,顺序来选择执行对应的构造方法;
通过Class类对象获取构造方法
例如:
class Panda{
public static void main(String[] args) throws NoSuchMethodException {
//首先创建Class类对象
Class classTest = Test.class;
//通过Class类对象获取Test类的构造方法
//获取Class类对象内所有的非私有化构造方法类对象数组
Constructor[] constructors = classTest.getConstructors();
//获取Class类对象内所有的构造方法类对象数组【包括私有化】【暴力反射】
Constructor[] constructors1 = classTest.getDeclaredConstructors();
//获取Class类对象指定参数类型,顺序,个数的非私有化构造方法Constructor类对象
//获取Test类的有三个参数的构造方法,传入参数应该是String.class,Integer.class,String.class
Constructor constructor = classTest.getConstructor(String.class,Integer.class,String.class);
//获取Test类没有参数的构造方法
Constructor constructor1 = classTest.getConstructor();
//获取Class类对象内任意指定类型的构造方法,包括【私有化构造方法】【暴力反射】
Constructor constructor2 = classTest.getDeclaredConstructor(String.class,Integer.class);
}
}
@Data
public class Test{
//成员变量
private String name;
private Integer age;
private String sex;
//无参构造方法
public Test(){}
//有参构造方法
public Test(String name,Integer age,String sex){
this.name = name;
this.age = age;
this.sex = sex;
}
private Test(String name, Integer age){
this.name = name;
this.age = age;
}
}