一、获取构造器结构
1、getConstructors()
getConstructors():获取当前运行时类中声明为public的构造器
Demo:
1 @Test
2 public void test1() {
3
4 Class clazz = Person.class;
5 //getConstructors():获取当前运行时类中声明为public的构造器
6 Constructor[] constructors = clazz.getConstructors();
7 for (Constructor c : constructors) {
8 System.out.println(c);
9 }
10 }
运行结果:
2、getDeclaredConstructors()
getDeclaredConstructors():获取当前运行时类中声明的所有的构造器
Demo:
1 @Test
2 public void test2() {
3
4 Class clazz = Person.class;
5 //getDeclaredConstructors():获取当前运行时类中声明的所有的构造器
6 Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
7 for(Constructor c : declaredConstructors){
8 System.out.println(c);
9 }
10 }
运行结果:
3、getConstructor(类<?> ..., parameterTypes)
getConstructor():根据构造方法参数类型获取当前运行时类中指定的 public 修饰的构造器
Demo:
1 @Test
2 public void test11() throws NoSuchMethodException {
3
4 Class clazz = Person.class;
5 //getConstructor():获取当前运行时类中所有的public修饰的构造器
6 Constructor constructor = clazz.getConstructor();
7 System.out.println(constructor);
8 }
4、getDeclaredConstructor()
getDeclaredConstructor():根据参数类型获取当前运行时类中指定的构造器(忽略权限修饰符)
Demo:
1 @Test
2 public void test11() throws NoSuchMethodException {
3
4 Class clazz = Person.class;
5 //getDeclaredConstructor():获取当前运行时类中指定的构造器
6 Constructor constructor = clazz.getDeclaredConstructor(String.class);
7 System.out.println(constructor);
8 }
二、关于构造器
说明:
① 构造器名称无需指定,因为它和类名一致;
② parameterTypes 参数是 Class 对象的一个数组,它按声明顺序标识构造方法的形参类型。
③ 如果此 Class 对象表示非静态上下文中声明的内部类,则形参类型作为第一个参数包括显示封闭的实例;
Demo:
1 public class TestConstructor{
2 @Test
3 public void test7() throws Exception{
4 Class<?> clazz = Outer.class;
5 Constructor<?> constructor = clazz.getDeclaredConstructor();
6 System.out.println(constructor);//无参构造
7
8 Class<?> c = Outer.Inner.class;
9 //因为Inner是非静态的内部类,所以它的构造器,默认第一个形参是外部类的实例对象
10 Constructor<?> cs = c.getDeclaredConstructor(Outer.class);
11 System.out.println(cs);
12 }
13 }
14 class Outer{
15 class Inner{
16
17 }
18 }
Demo2:
1 @Test
2 public void test8(){
3 Class<?> clazz = String.class;
4 Constructor<?>[] constructors = clazz.getConstructors();
5 for (Constructor<?> constructor : constructors) {
6 int mod = constructor.getModifiers(); //获取构造器修饰符
7 String name = constructor.getName(); //获取构造器名字
8 Class<?>[] parameterTypes = constructor.getParameterTypes(); //获取构造器参数列表
9 System.out.print(Modifier.toString(mod)+"\t" + name + "(");
10 System.out.println(Arrays.toString(parameterTypes)+")");
11 }
12 }
三、