class.getdeclaredconstructors()返回当前类显式声明的所有构造函数(含private),不包含父类构造器或编译器生成的默认无参构造器,顺序不保证,调用private需setaccessible(true)。

Class.getDeclaredConstructors() 会返回当前类中**显式声明的所有构造函数(包括 public、protected、default、private)**,但不包含从父类继承的构造函数(Java 中构造函数不会被继承)。
关键点说明
这个方法只关注“当前类体中写出来的构造器”,不管访问修饰符是什么。哪怕构造器是 private,也能被获取到——但调用时仍受访问控制限制,需配合 setAccessible(true) 才能实际实例化。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
基本用法示例
假设有一个类:
class Person {private Person() {}
Person(String name) {}
public Person(int age) {}
}
调用 Person.class.getDeclaredConstructors() 会返回长度为 3 的 Constructor[] 数组,对应上面三个构造器。
注意事项
- 不会返回编译器自动生成的无参构造器(如果类里没写任何构造器,编译器会加一个 public 的;但一旦你写了任意构造器,这个默认的就没了)
- 返回的数组顺序不保证与源码顺序一致,也不按访问级别排序,不要依赖顺序
- 若想调用 private 构造器,必须先调用
constructor.setAccessible(true) - 与
getConstructors()不同:后者只返回 public 构造器,且包括父类的 public 构造器?不,等等——构造器永远不继承,所以getConstructors()实际也只返回本类的 public 构造器
常见搭配操作
- 遍历并打印每个构造器的参数类型:
c.getParameterTypes() - 检查是否为私有:
Modifier.isPrivate(c.getModifiers()) - 跳过 synthetic 构造器(如枚举或内部类编译器生成的):
!c.isSynthetic() - 尝试 newInstance(需处理异常):
c.setAccessible(true); c.newInstance(args...)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










