- 类型参数:
-
T- 声明构造函数的类
- 所有实现的接口:
-
AnnotatedElement,GenericDeclaration,Member
Constructor 提供有关类的单个构造函数的信息和访问权限。
Constructor 允许在将实际参数与newInstance()的底层构造函数的形式参数进行匹配时发生扩展转换,但如果发生缩小转换,则会抛出IllegalArgumentException。
- 自 JDK 版本:
- 1.1
- 参见:
-
Field Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean将此Constructor与指定对象进行比较。返回一个AnnotatedType对象,表示用于指定由此Executable对象表示的方法/构造函数的接收器类型的类型的使用。返回一个AnnotatedType对象,表示用于指定由此Executable对象表示的方法/构造函数的返回类型的类型的使用。<T extends Annotation>
TgetAnnotation(Class<T> annotationClass) 如果此类元素的指定类型的注释存在,则返回该注释,否则返回null。返回此元素上直接存在的注释。返回代表声明由此对象表示的构造函数的类的Class对象。Class<?>[]返回一个Class对象数组,表示由此对象表示的底层可执行对象声明要抛出的异常的类型。Type[]返回一个Type对象数组,表示由此可执行对象声明要抛出的异常。Type[]返回一个Type对象数组,表示由此对象表示的可执行对象的声明顺序中的形式参数类型。int返回此对象表示的可执行对象的Java语言修饰符。getName()返回此构造函数的名称,作为字符串。Annotation[][]返回一个Executable对象表示的形式参数上的注释的数组的数组,按声明顺序。int返回由此对象表示的可执行对象的形式参数的数量(无论是显式声明的还是隐式声明的)。Class<?>[]返回一个Class对象数组,表示由此对象表示的可执行对象的声明顺序中的形式参数类型。TypeVariable<Constructor<T>>[]返回一个TypeVariable对象数组,表示由此GenericDeclaration对象表示的泛型声明中声明的类型变量,按声明顺序。inthashCode()返回此Constructor的哈希码。boolean如果此可执行对象是合成构造,则返回true;否则返回false。boolean如果此可执行对象声明为接受可变数量的参数,则返回true;否则返回false。newInstance(Object... initargs) 使用此Constructor对象表示的构造函数来创建和初始化构造函数声明类的新实例,使用指定的初始化参数。voidsetAccessible(boolean flag) 将此反射对象的accessible标志设置为指定的布尔值。返回描述此Constructor的字符串,包括类型参数。toString()返回描述此Constructor的字符串。Methods declared in class java.lang.reflect.Executable
accessFlags, getAnnotatedExceptionTypes, getAnnotatedParameterTypes, getAnnotationsByType, getParametersMethods declared in class java.lang.reflect.AccessibleObject
canAccess, getAnnotations, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAccessible, isAnnotationPresent, setAccessible, trySetAccessibleMethods declared in class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods declared in interface java.lang.reflect.AnnotatedElement
getAnnotations, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAnnotationPresent
-
Method Details
-
setAccessible
public void setAccessible(boolean flag) 将此反射对象的accessible标志设置为指定的布尔值。当值为true时,表示反射对象应该在使用时抑制Java语言访问控制检查。当值为false时,表示反射对象在使用时应强制执行Java语言访问控制检查,类描述中指出的变化除外。调用者在类
C中可以使用此方法来启用对声明类D的declaring class的member的访问,如果满足以下任何条件:C和D在同一模块中。- 成员是
public的,D在将D包含的模块至少exports到包含C的模块中。 - 成员是
protectedstatic的,D在将D包含的模块至少exports到包含C的模块中,并且C是D的子类。 D在将D包含的模块至少opens到包含C的模块中。未命名模块和开放模块中的所有包都对所有模块开放,因此当D在未命名或开放模块中时,此方法总是成功的。
JNI代码可以使用此方法,如果满足以下条件,则可以在堆栈上没有调用者类的情况下启用对声明类
D的declaring class的member的访问:- 成员是
public的,D在无条件exports的包中。
此方法不能用于启用对私有成员、具有默认(包)访问权限的成员、不同模块中声明的受保护实例成员或受保护构造函数的访问权限,当包含声明类的包未对调用者模块开放时。
此方法不能用于启用对不可修改的最终字段的写访问权限。以下字段是不可修改的:
当
true时,accessible标志会抑制Java语言访问控制检查,仅允许对这些不可修改的最终字段进行读访问。如果存在安全管理器,则首先调用其
checkPermission方法,使用ReflectPermission("suppressAccessChecks")权限。如果此对象是
Class类的Constructor对象,并且flag为true,则还会抛出SecurityException。- 覆盖:
-
setAccessible在类AccessibleObject中 - 参数:
-
flag-accessible标志的新值 - 抛出:
-
InaccessibleObjectException- 如果无法启用访问权限 -
SecurityException- 如果安全管理器拒绝请求或这是java.lang.Class的构造函数 - 外部规范
- 参见:
-
getDeclaringClass
返回代表声明由此对象表示的构造函数的类的Class对象。- 指定者:
-
getDeclaringClass在接口Member中 - 指定者:
-
getDeclaringClass在类Executable中 - 返回:
- 表示底层成员的声明类的对象
-
getName
返回此构造函数的名称,作为字符串。这是构造函数声明类的二进制名称。- 指定者:
-
getName在接口Member中 - 指定者:
-
getName在类Executable中 - 返回:
- 底层成员的简单名称
-
getModifiers
public int getModifiers()返回此对象表示的可执行对象的Java语言修饰符。- 指定者:
-
getModifiers在接口Member中 - 指定者:
-
getModifiers在类Executable中 - 返回:
- 此对象表示的可执行对象的Java语言修饰符
- 参见 Java语言规范:
-
8.8.3 构造函数修饰符
- 另请参阅:
-
getTypeParameters
返回一个TypeVariable对象数组,表示此GenericDeclaration对象声明的泛型声明中声明的类型变量,按声明顺序排列。如果基础泛型声明未声明任何类型变量,则返回长度为0的数组。- 指定者:
-
getTypeParameters在接口GenericDeclaration中 - 指定者:
-
getTypeParameters在类Executable中 - 返回:
-
一个
TypeVariable对象数组,表示此泛型声明声明的类型变量 - 抛出:
-
GenericSignatureFormatError- 如果此泛型声明的泛型签名不符合Java虚拟机规范中指定的格式 - 自:
- 1.5
-
getParameterTypes
返回一个Class对象数组,表示此对象所代表的可执行对象的声明顺序中的形式参数类型。如果基础可执行对象不带参数,则返回长度为0的数组。请注意,一些内部类的构造函数可能除了显式声明的参数外,还有一个隐式声明的参数。- 指定者:
-
getParameterTypes在类Executable中 - 返回:
- 此对象表示的可执行对象的参数类型
-
getParameterCount
public int getParameterCount()返回此对象所代表的可执行对象的形式参数数量(无论是显式声明的、隐式声明的还是两者都不是)。- 指定者:
-
getParameterCount在类Executable中 - 返回:
- 此对象表示的可执行对象的形式参数数量
- 自:
- 1.8
-
getGenericParameterTypes
返回一个Type对象数组,表示此对象所代表的可执行对象的声明顺序中的形式参数类型。如果基础可执行对象不带参数,则返回长度为0的数组。请注意,一些内部类的构造函数可能除了显式声明的参数外,还有一个隐式声明的参数。还请注意,作为建模工件,返回的参数数量可能因是否存在泛型信息而有所不同。如果存在泛型信息,则只返回源代码中明确存在的参数;如果不存在泛型信息,则可能还会返回隐式和合成参数。如果形式参数类型是参数化类型,则返回的
Type对象必须准确反映源代码中使用的实际类型参数。如果形式参数类型是类型变量或参数化类型,则会创建它。否则,它会被解析。
- 覆盖:
-
getGenericParameterTypes在类Executable中 - 返回:
-
一个
Type数组,表示基础可执行对象的形式参数类型,按声明顺序排列 - 抛出:
-
GenericSignatureFormatError- 如果泛型方法签名不符合Java虚拟机规范中指定的格式 -
TypeNotPresentException- 如果基础可执行对象的任何参数类型引用不存在的类型声明 -
MalformedParameterizedTypeException- 如果基础可执行对象的参数类型引用由于任何原因无法实例化的参数化类型 - 自:
- 1.5
-
getExceptionTypes
返回一个Class对象数组,表示此对象所代表的可执行对象声明要抛出的异常类型。如果可执行对象在其throws子句中未声明异常,则返回长度为0的数组。- 指定者:
-
getExceptionTypes在类Executable中 - 返回:
- 此对象表示的可执行对象声明要抛出的异常类型
-
getGenericExceptionTypes
返回一个Type对象数组,表示此可执行对象声明要抛出的异常。如果基础可执行对象在其throws子句中未声明异常,则返回长度为0的数组。如果异常类型是类型变量或参数化类型,则会创建它。否则,它会被解析。
- 覆盖:
-
getGenericExceptionTypes在类Executable中 - 返回:
-
一个表示基础可执行对象抛出的异常类型的
Type数组 - 抛出:
-
GenericSignatureFormatError- 如果泛型方法签名不符合Java虚拟机规范中指定的格式 -
TypeNotPresentException- 如果基础可执行对象的throws子句引用不存在的类型声明 -
MalformedParameterizedTypeException- 如果基础可执行对象的throws子句引用由于任何原因无法实例化的参数化类型 - 自:
- 1.5
-
equals
将此Constructor与指定对象进行比较。如果对象相同,则返回true。如果两个Constructor对象由同一类声明并具有相同的形式参数类型,则它们相同。 -
hashCode
public int hashCode()返回此Constructor的哈希码。哈希码与底层构造函数的声明类名的哈希码相同。 -
toString
返回描述此Constructor的字符串。字符串格式为构造函数的访问修饰符(如果有)、后跟声明类的完全限定名称,后跟括号括起的、逗号分隔的构造函数的形式参数类型列表。例如:public java.util.HashMap(int,float)如果构造函数声明要抛出异常,则参数列表后跟一个空格,后跟单词"
throws",后跟一个逗号分隔的抛出异常类型列表。构造函数的唯一可能修饰符是访问修饰符
public、protected或private。这三者只能出现一个,如果构造函数具有默认(包)访问权限,则可以没有任何一个。- 覆盖:
-
toString在类Object中 - 返回:
-
描述此
Constructor的字符串 - 参见 Java语言规范:
-
8.8.3 构造函数修饰符
8.9.2 枚举体声明
-
toGenericString
返回描述此Constructor的字符串,包括类型参数。该字符串格式为构造函数的访问修饰符(如果有的话),后跟构造函数的类型参数的尖括号分隔的逗号分隔列表(如果有的话),包括类型参数的信息性边界(如果有的话),后跟声明类的完全限定名称,后跟构造函数的泛型形式参数类型的括号,逗号分隔的列表。如果此构造函数声明为接受可变数量的参数,而不是将最后一个参数标记为"Type[]",则将其标记为"Type..."。使用空格将访问修饰符与类型参数或类名分开。如果没有类型参数,则省略类型参数列表;如果存在类型参数列表,则使用空格将列表与类名分开。如果构造函数声明要抛出异常,则参数列表后跟一个空格,后跟单词"throws",后跟逗号分隔的泛型抛出异常类型列表。构造函数的唯一可能修饰符是访问修饰符
public、protected或private。这三者中只能出现一个,或者如果构造函数具有默认(包)访问权限,则可以一个也不出现。- 指定者:
-
toGenericString在类Executable中 - 返回:
-
描述此
Constructor的字符串,包括类型参数 - 参见 Java 语言规范:
-
8.8.3 构造函数修饰符
8.9.2 枚举体声明
- 自版本:
- 1.5
-
newInstance
public T newInstance(Object... initargs) throws InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException 使用此Constructor对象表示的构造函数来创建和初始化构造函数声明类的新实例,并使用指定的初始化参数。个别参数会自动解包以匹配原始形式参数,并且原始和引用参数将根据需要进行方法调用转换。如果基础构造函数所需的形式参数数量为0,则提供的
initargs数组可以长度为0或为null。如果构造函数的声明类是非静态上下文中的内部类,则构造函数的第一个参数需要是封闭实例;请参阅The Java Language Specification的第15.9.3节。
如果需要的访问和参数检查成功并且实例化将继续进行,则如果尚未初始化构造函数的声明类,则将初始化该类。
如果构造函数正常完成,则返回新创建和初始化的实例。
- 参数:
-
initargs- 传递给构造函数调用的对象数组;原始类型的值将包装在适当类型的包装对象中(例如,在Float中的float) - 返回:
- 通过调用此对象表示的构造函数创建的新对象
- 抛出:
-
IllegalAccessException- 如果此Constructor对象正在强制执行Java语言访问控制,并且基础构造函数不可访问。 -
IllegalArgumentException- 如果实际参数和形式参数的数量不同;如果原始参数的解包转换失败;或者如果在可能的解包后,参数值无法通过方法调用转换转换为相应的形式参数类型;如果此构造函数属于枚举类。 -
InstantiationException- 如果声明基础构造函数的类表示抽象类。 -
InvocationTargetException- 如果基础构造函数引发异常。 -
ExceptionInInitializerError- 如果此方法引发的初始化失败。
-
isVarArgs
public boolean isVarArgs()如果此可执行文件声明为接受可变数量的参数,则返回true;否则返回false。- 覆盖:
-
isVarArgs在类Executable中 - 返回:
-
如果此可执行文件声明为接受可变数量的参数,则返回
true;否则返回false - 参见 Java 语言规范:
-
8.4.1 形式参数
- 自版本:
- 1.5
-
isSynthetic
public boolean isSynthetic()如果此可执行文件是合成构造,则返回true;否则返回false。- 指定者:
-
isSynthetic在接口Member中 - 覆盖:
-
isSynthetic在类Executable中 - 返回:
-
如果此可执行文件是合成构造,根据The Java Language Specification的定义,则返回
true。 - 参见 Java 语言规范:
-
13.1 二进制形式
- 参见 Java 虚拟机规范:
-
4.6 方法
- 自版本:
- 1.5
- 另请参见:
-
getAnnotation
如果此元素的指定类型的注解存在,则返回该注解;否则返回null。请注意,此方法返回的任何注解都是声明注解。
- 指定者:
-
getAnnotation在接口AnnotatedElement中 - 覆盖:
-
getAnnotation在类Executable中 - 类型参数:
-
T- 要查询并返回的注解类型 - 参数:
-
annotationClass- 对应于注解类型的Class对象 - 返回:
- 如果此元素上存在指定注解类型的注解,则返回该元素的注解,否则返回null
- 抛出:
-
NullPointerException- 如果给定的注解类为null - 自版本:
- 1.5
-
getDeclaredAnnotations
返回直接存在于此元素上的注解。此方法忽略继承的注解。如果此元素上没有直接存在的注解,则返回值为长度为0的数组。调用此方法的调用者可以修改返回的数组;这不会影响返回给其他调用者的数组。请注意,此方法返回的任何注解都是声明注解。
- 指定者:
-
getDeclaredAnnotations在接口AnnotatedElement中 - 覆盖:
-
getDeclaredAnnotations在类AccessibleObject中 - 返回:
- 直接存在于此元素上的注解
- 自版本:
- 1.5
-
getParameterAnnotations
返回一个Executable对象表示的Executable的形式参数的注解数组的数组,按声明顺序排列。将在返回的数组中表示合成和强制参数(请参见下面的解释),例如内部类构造函数的外部"this"参数。如果可执行文件没有参数(意味着没有形式参数、合成参数和强制参数),则将返回长度为0的数组。如果Executable有一个或多个参数,则对于每个没有注解的参数将返回长度为零的嵌套数组。返回的数组中包含的注解对象是可序列化的。调用此方法的调用者可以修改返回的数组;这不会影响返回给其他调用者的数组。编译器可能会向方法的参数列表中添加在源代码中隐式声明的额外参数("强制"),以及在源代码中既不隐式声明也不显式声明的参数("合成")。有关更多信息,请参阅Parameter。请注意,此方法返回的任何注解都是声明注解。
- 指定者:
-
getParameterAnnotations在类Executable中 - 返回:
- 表示此对象表示的可执行对象的形式和隐式参数上的注解的数组的数组,按声明顺序排列
- 自版本:
- 1.5
- 参见:
-
getAnnotatedReturnType
返回一个AnnotatedType对象,该对象表示用于指定此Executable所代表的方法/构造函数的返回类型的类型使用。如果此Executable对象表示构造函数,则AnnotatedType对象表示构造对象的类型。如果此Executable对象表示方法,则AnnotatedType对象表示用于指定方法返回类型的类型使用。- 指定者:
-
getAnnotatedReturnType在类Executable - 返回:
-
表示此
Executable所代表的方法或构造函数的返回类型的对象 - 自:
- 1.8
-
getAnnotatedReceiverType
返回一个AnnotatedType对象,该对象表示用于指定此Executable对象所代表的方法/构造函数的接收者类型的类型使用。方法/构造函数的接收者类型仅在方法/构造函数具有接收者参数时才可用(JLS 8.4.1)。如果此Executable对象表示实例方法或表示内部成员类的构造函数,并且方法/构造函数要么没有接收者参数,要么接收者参数的类型没有注解,则返回值是表示没有注解的元素的AnnotatedType对象。如果此Executable对象表示静态方法或表示顶层、静态成员、局部或匿名类的构造函数,则返回值为null。- 覆盖:
-
getAnnotatedReceiverType在类Executable - 返回:
-
表示此
Executable所代表的方法或构造函数的接收者类型的对象,如果此Executable无法具有接收者参数,则返回null - 自:
- 1.8
-