java.lang.reflect.Constructor 类代表类的构造方法,是 java 反射的组成部分。

获取 Constructor 实例

构造方法的封装类为Constructor,Class类中有如下四个方法来获得Constructor对象:

  1. public Constructor<?>[] getConstructors():返回类的所有的public构造方法
  2. public Constructor<T> getConstructor(Class<?>...parameterTypes):返回指定的public构造方法
  3. public Constructor<?>[] getDeclaredConstructors():返回类的所有的构造方法
  4. public Constructor<T> getDeclaredConstructor(Class<?>...parameterTypes):返回指定的构造方法

注意:反射不支持自动封箱,传入参数时要小心(自动封箱是在编译期间的,而反射在运行期间),因此在传参时注意是基本类型还是包装类

Constructor 的常用方法

java.lang.reflect.Modifier 有一个 public static String toString(int mod) 方法,能够将获取的 int 修饰符转换成可以阅读的字符串

  1. 获取构造方法的修饰符:public int getModifiers()
  2. 获取构造方法名称:public String getName()
  3. 获取构造方法的参数个数:public int getParameterCount()
  4. 取得构造方法的参数类型:public Class<?>[] getParameterTypes()
  5. 取得构造方法所抛出的异常类型:public Class<?>[] getExceptionTypes()
  6. 通过构造方法实例化对象:public T newInstance(Object … initargs)

注意事项:一般开发中大多使用的是无参构造

通过反射创建对象:

  • java.lang.reflect.Constructor.newInstance()
    • 可以调用任意参数的构造方法
    • 会将构造方法中抛出的异常都包装成InvocationTargetException抛出
    • 可以通过setAccessible(true)方法绕过访问权限访问private构造方法
  • Class.newInstance()
    • 仅可用来调用无参的构造方法
    • 会将构造方法中抛出的异常不作处理原样抛出
    • 需要拥有构造方法的访问权限