一、获取构造器结构

  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     }
复制代码

 

 

三、

 

posted on   格物致知_Tony  阅读(144)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示

目录导航