- 类型参数:
-
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
对象表示的泛型声明中声明的类型变量,按声明顺序。int
hashCode()
返回此Constructor
的哈希码。boolean
如果此可执行对象是合成构造,则返回true
;否则返回false
。boolean
如果此可执行对象声明为接受可变数量的参数,则返回true
;否则返回false
。newInstance
(Object... initargs) 使用此Constructor
对象表示的构造函数来创建和初始化构造函数声明类的新实例,使用指定的初始化参数。void
setAccessible
(boolean flag) 将此反射对象的accessible
标志设置为指定的布尔值。返回描述此Constructor
的字符串,包括类型参数。toString()
返回描述此Constructor
的字符串。Methods declared in class java.lang.reflect.Executable
accessFlags, getAnnotatedExceptionTypes, getAnnotatedParameterTypes, getAnnotationsByType, getParameters
Methods declared in class java.lang.reflect.AccessibleObject
canAccess, getAnnotations, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAccessible, isAnnotationPresent, setAccessible, trySetAccessible
Methods declared in class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods 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
的模块中。 - 成员是
protected
static
的,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
-