Constructor类概述
Constructor类概述
* 类中的每一个构造方法都是一个Constructor类的对象
通过反射获取类的构造方法
Class类中与Constructor相关的方法
- Constructor getConstructor(Class… parameterTypes)
* 根据参数类型获得对应的Constructor对象。
* 只能获得public修饰的构造方法 - Constructor getDeclaredConstructor(Class… parameterTypes)—推荐
* 根据参数类型获得对应的Constructor对象
* 可以是public、protected、(默认)、private修饰符的构造方法。 - Constructor[] getConstructors()
获得类中的所有构造方法对象,只能获得public的 - Constructor[] getDeclaredConstructors()—推荐
获得类中的所有构造方法对象
可以是public、protected、(默认)、private修饰符的构造方法。
通过反射执行构造方法
Constructor对象常用方法
- T newInstance(Object… initargs)
根据指定的参数创建对象
参数:被执行的构造方法需要的实际参数 - void setAccessible(true)
设置"暴力反射"——是否取消权限检查,true取消权限检查,false表示不取消
示例代码
类代码
public class Person {
public String name;
public int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(String name) {
this.name = name;
}
private Person(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
测试类代码
public class Test {
public static void main(String[] args) throws Exception{
/*
Constructor getDeclaredConstructor(Class... parameterTypes)---推荐
* 根据参数类型获得对应的Constructor对象
* 可以是public、protected、(默认)、private修饰符的构造方法。
* 参数: 要获取的构造方法的形参类型的Class对象
Constructor[] getDeclaredConstructors()---推荐
获得类中的所有构造方法对象
可以是public、protected、(默认)、private修饰符的构造方法。
Constructor对象常用方法
1. T newInstance(Object... initargs)
根据指定的参数创建对象
参数:被执行的构造方法需要的实际参数
2. void setAccessible(true)
设置"暴力反射"——是否取消权限检查,true取消权限检查,false表示不取消
*/
// 获取Person类的Class对象
Class<Person> c = Person.class;
// 获取指定构造方法:
// 获取第1个构造方法
Constructor<Person> con1 = c.getDeclaredConstructor();// con1表示第一个构造方法
// 获取第2个构造方法
Constructor<Person> con2 = c.getDeclaredConstructor(String.class, int.class);// con2表示第二个构造方法
// 获取第3个构造方法
Constructor<Person> con3 = c.getDeclaredConstructor(String.class);// con3表示第三个构造方法
// 获取第4个构造方法
Constructor<Person> con4 = c.getDeclaredConstructor(int.class);// con4表示第四个构造方法
System.out.println(con1);
System.out.println(con2);
System.out.println(con3);
System.out.println(con4);
System.out.println("========");
// 获取所有的构造方法:
Constructor<?>[] cons = c.getDeclaredConstructors();
for (Constructor<?> con : cons) {
System.out.println(con);
}
System.out.println("========");
// 操作构造方法:
// 通过反射执行第1个构造方法
Person p1 = con1.newInstance();
System.out.println("p1:"+p1);
// 通过反射执行第2个构造方法
Person p2 = con2.newInstance("张三", 18);
System.out.println("p2:"+p2);
// 通过反射执行第3个构造方法
Person p3 = con3.newInstance("李四");
System.out.println("p3:"+p3);
// 通过反射执行第4个构造方法
// 私有的构造方法想要被执行,要先取消该方法的权限检查
con4.setAccessible(true);
Person p4 = con4.newInstance(19);
System.out.println("p4:"+p4);
}
}
小结
获取类的构造方法对象:
Constructor getDeclaredConstructor(Class... parameterTypes)
* 根据参数类型获得对应的Constructor对象
* 可以是public、protected、(默认)、private修饰符的构造方法。
Constructor[] getDeclaredConstructors()
获得类中的所有构造方法对象
可以是public、protected、(默认)、private修饰符的构造方法。
Constructor对象常用方法
1. T newInstance(Object... initargs)
根据指定的参数创建对象
2. void setAccessible(true)
设置"暴力反射"——是否取消权限检查,true取消权限检查,false表示不取消