class.getconstructors()仅返回当前类中所有public构造函数,不包含父类构造器、非public构造器及匿名类等无显式public构造器的情况;获取全部构造器需用getdeclaredconstructors()。

Class.getConstructors() 方法专门用于获取当前类中所有 public 构造函数,返回的是一个 Constructor[] 数组,且仅包含本类声明的 public 构造器(不包括父类的)。
只返回 public 构造函数
该方法严格遵循 Java 的访问控制规则:只有修饰符为 public 的构造函数才会被返回。如果某个构造函数是 protected、包级私有或 private,它不会出现在结果中。
- 即使子类继承了父类的 protected 构造器,
getConstructors()也不会返回父类的构造器 - 匿名内部类、本地类等没有显式 public 构造器时,可能返回空数组
- 如果类没有定义任何 public 构造器(比如全是 private 或默认访问),结果为空数组
不包含非 public 构造器
想获取非 public 构造器(如 private 构造器),必须使用 Class.getDeclaredConstructors(),它返回所有声明的构造器(含访问权限信息),之后可手动过滤或设置 setAccessible(true) 来调用。
-
getConstructors()和getDeclaredConstructors()是互补关系,不是子集关系 - 前者面向外部可用性,后者面向完整声明信息
基本用法示例
假设有一个类:
<font color="#888">public class Person {
public Person() {}
public Person(String name) {}
private Person(int age) {} // 不会被 getConstructors() 返回
}</font>
调用方式:
<font color="#888">Constructor>[] ctors = Person.class.getConstructors();
for (Constructor> c : ctors) {
System.out.println(c); // 输出两个 public 构造器
}</font>
注意数组元素类型和泛型
返回数组的每个元素都是 Constructor<t></t> 类型,其中 T 是原始 Class 对象所表示的类。虽然常写作 Constructor>,但实际可安全转型为 Constructor<person></person> 等具体类型。
- 调用
newInstance()时需注意:Java 9+ 已弃用该方法,推荐用constructor.newInstance(args)并捕获相关异常 - 若构造器抛出检查异常,反射调用时会包装为
InvocationTargetException
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











