Java反射机制通过Class对象获取类的构造器、方法、字段等元数据:getConstructors()和getDeclaredConstructors()分别获取public继承构造器和本类所有构造器;getMethods()和getDeclaredMethods()同理适用于方法;getFields()和getDeclaredFields()适用于字段;私有成员需setAccessible(true)后操作;还可获取注解、泛型、修饰符及类型特征。

在 Java 中,可以通过 Class 对象在运行时获取类的构造器、方法、字段(属性)等元数据信息,这是反射(Reflection)机制的核心能力之一。关键在于调用 Class 提供的一系列 getXXX() 和 getDeclaredXXX() 方法。
获取构造器(Constructors)
getConstructors() 返回所有 public 且可访问 的构造器(包括从父类继承的 public 构造器);getDeclaredConstructors() 则返回本类声明的所有构造器(含 private、protected、package-private),但不包括父类的。
- 若需调用私有构造器,先用
setAccessible(true)破除访问限制 - 通过
Constructor.newInstance(...)可动态创建实例(注意:Java 9+ 推荐使用Constructor#newInstance而非Class#newInstance,后者已弃用)
获取方法(Methods)
getMethods() 返回所有 public 方法(包括从父类和接口继承的);getDeclaredMethods() 仅返回当前类中声明的方法(含非 public),不包含继承的。
- 可通过
Method.getReturnType()、Method.getParameterTypes()、Method.getExceptionTypes()获取签名细节 - 调用私有或受保护方法前,同样需调用
setAccessible(true) - 用
Method.invoke(obj, args...)执行方法(静态方法传null作第一个参数)
获取字段(Fields / 属性)
getFields() 返回所有 public 字段(含父类继承的);getDeclaredFields() 返回当前类定义的所有字段(无视访问修饰符)。
- 字段值读写分别用
Field.get(obj)和Field.set(obj, value) - 对 private 字段操作前必须调用
setAccessible(true) - 静态字段传
null作为对象参数
其他常用元数据操作
除了结构信息,Class 还支持获取注解、泛型类型、父类与接口、修饰符等:
-
getAnnotations()或getDeclaredAnnotation(Class<t>)</t>获取运行时注解 -
getGenericSuperclass()和getGenericInterfaces()获取带泛型参数的父类/接口类型 -
getModifiers()返回整数编码,配合Modifier.isPublic()等工具方法解析访问级别 -
isInterface()、isEnum()、isArray()等快速判断类型特征










