java.lang.reflect.Constructor 类代表类的构造方法,是 java 反射的组成部分。
获取 Constructor 实例
构造方法的封装类为Constructor,Class类中有如下四个方法来获得Constructor对象:
public Constructor<?>[] getConstructors()
:返回类的所有的public构造方法public Constructor<T> getConstructor(Class<?>...parameterTypes)
:返回指定的public构造方法public Constructor<?>[] getDeclaredConstructors()
:返回类的所有的构造方法public Constructor<T> getDeclaredConstructor(Class<?>...parameterTypes)
:返回指定的构造方法
注意:反射不支持自动封箱,传入参数时要小心(自动封箱是在编译期间的,而反射在运行期间),因此在传参时注意是基本类型还是包装类
Constructor 的常用方法
java.lang.reflect.Modifier 有一个 public static String toString(int mod) 方法,能够将获取的 int 修饰符转换成可以阅读的字符串
- 获取构造方法的修饰符:public int getModifiers()
- 获取构造方法名称:public String getName()
- 获取构造方法的参数个数:public int getParameterCount()
- 取得构造方法的参数类型:public Class<?>[] getParameterTypes()
- 取得构造方法所抛出的异常类型:public Class<?>[] getExceptionTypes()
- 通过构造方法实例化对象:public T newInstance(Object … initargs)
注意事项:一般开发中大多使用的是无参构造
通过反射创建对象:
java.lang.reflect.Constructor.newInstance()
:- 可以调用任意参数的构造方法
- 会将构造方法中抛出的异常都包装成
InvocationTargetException
抛出 - 可以通过
setAccessible(true)
方法绕过访问权限访问private构造方法
- 可以调用任意参数的构造方法
Class.newInstance()
:- 仅可用来调用无参的构造方法
- 会将构造方法中抛出的异常不作处理原样抛出
- 需要拥有构造方法的访问权限
- 仅可用来调用无参的构造方法