- java.lang.Object
-
- java.lang.reflect.AccessibleObject
-
- java.lang.reflect.Executable
-
- java.lang.reflect.Method
-
- All Implemented Interfaces:
-
AnnotatedElement
,GenericDeclaration
,Member
public final class 方法 extends Executable
A方法
在类或接口上提供有关单一方法的信息和访问权限。 反映的方法可以是类方法或实例方法(包括抽象方法)。A
方法
允许在匹配实际参数以使用底层方法的形式参数进行调用时发生扩展转换,但如果发生缩小转换,则会引发IllegalArgumentException
。- 从以下版本开始:
- 1.1
- 另请参见:
-
Member
,Class
,Class.getMethods()
,Class.getMethod(String, Class[])
,Class.getDeclaredMethods()
,Class.getDeclaredMethod(String, Class[])
-
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 boolean
equals(Object obj)
将此方法
与指定对象进行比较。AnnotatedType
getAnnotatedReturnType()
返回一个AnnotatedType
对象,表示使用类型来指定此可执行文件所表示的方法/构造函数的返回类型。<T extends Annotation>
TgetAnnotation(Class<T> annotationClass)
返回该元素的,如果这样的注释 ,否则返回null指定类型的注释。Annotation[]
getDeclaredAnnotations()
返回 直接存在于此元素上的注释。Class<?>
getDeclaringClass()
返回表示由该对象表示的方法的类或接口的Class
对象。Object
getDefaultValue()
返回由此方法
实例表示的注释成员的默认值。Class<?>[]
getExceptionTypes()
返回一个Class
对象的数组,表示由该对象表示的底层可执行文件所声明的异常类型。Type[]
getGenericExceptionTypes()
返回一个Type
对象的数组,表示此可执行对象声明抛出的异常。Type[]
getGenericParameterTypes()
返回一个Type
对象的数组,Type
以声明顺序表示由该对象表示的可执行文件的形式参数类型。Type
getGenericReturnType()
返回一个Type
对象,它表示由该表示的方法的正式返回类型方法
对象。int
getModifiers()
返回由该对象表示的可执行文件的Java语言modifiers 。String
getName()
返回由该方法
对象表示的方法的名称,作为String
。Annotation[][]
getParameterAnnotations()
返回一个Annotation
s的数组数组,表示由该对象表示的Executable
的形式参数的声明顺序。int
getParameterCount()
返回由此对象表示的可执行文件的形式参数(无论是显式声明还是隐式声明)的数量。Class<?>[]
getParameterTypes()
返回一个Class
对象的数组,表示由该对象表示的可执行文件的声明顺序的形式参数类型。Class<?>
getReturnType()
返回一个Class
对象,表示由该方法
对象表示的方法的正式返回类型。TypeVariable<方法>[]
getTypeParameters()
返回一个TypeVariable
对象的数组,表示由该GenericDeclaration
对象表示的通用声明以声明顺序声明的类型变量。int
hashCode()
返回此方法
的哈希方法
。Object
invoke(Object obj, Object... args)
在具有指定参数的指定对象上调用此方法
对象表示的基础方法。boolean
isBridge()
如果此方法是桥接方法,则返回true
; 否则返回false
。boolean
isDefault()
如果此方法是默认方法,则返回true
; 否则返回false
。boolean
isSynthetic()
如果这个可执行文件是一个合成的结构,返回true
; 否则返回false
。boolean
isVarArgs()
如果这个可执行文件被声明为采用可变数量的参数,则返回true
; 否则返回false
。void
setAccessible(boolean flag)
将此反射对象的accessible
标志设置为指示的布尔值。String
toGenericString()
返回一个描述这个方法
的字符串,包括类型参数。String
toString()
返回描述此方法
的字符串。-
Methods inherited from class java.lang.reflect.AccessibleObject
canAccess, getAnnotations, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAccessible, isAnnotationPresent, setAccessible, trySetAccessible
-
Methods inherited from interface java.lang.reflect.AnnotatedElement
getAnnotations, getDeclaredAnnotation, getDeclaredAnnotationsByType, isAnnotationPresent
-
Methods inherited from class java.lang.reflect.Executable
getAnnotatedExceptionTypes, getAnnotatedParameterTypes, getAnnotatedReceiverType, getAnnotationsByType, getParameters
-
-
-
-
方法详细信息
-
setAccessible
public void setAccessible(boolean flag)
描述从类别复制:AccessibleObject
将此反射对象的accessible
标志设置为指示的布尔值。 值为true
表示反射对象应该在使用Java语言访问控制时抑制检查。 值为false
表示反射对象应该在使用Java语言访问控制时执行检查,并在类描述中指出变体。该方法可以通过一个呼叫方在类中使用
C
以使得能够访问一个member
的declaring class
D
如果任何下列条件成立:-
C
和D
都在同一个模块中。 - 所述构件是
public
和D
是public
在于包含模块的封装D
exports
到至少包含模块C
。 - 所述构件是
protected
static
,D
是public
在于包含模块的封装D
出口到至少包含模块C
,和C
是的一个子类D
。 -
D
是在包含该模块的封装D
opens
到至少包含模块C
。 未命名和开放模块中的所有软件包均可对所有模块开放,因此当D
处于未命名或打开模块时,此方法始终会成功。
当声明类与调用者不同的模块时,此方法不能用于启用对私有成员,具有默认(包)访问权限的成员,受保护的实例成员或受保护的构造函数的访问,并且包含声明类的包不能打开呼叫者的模块。
如果有一个安全管理员,它的
checkPermission
方法首先被调用一个ReflectPermission("suppressAccessChecks")
权限。- 重写:
-
setAccessible
在类AccessibleObject
- 参数
-
flag
- 新值为accessible
旗帜 - 异常
-
InaccessibleObjectException
- 如果无法启用访问权限 -
SecurityException
- 如果请求被安全管理器拒绝 - 另请参见:
-
AccessibleObject.trySetAccessible()
,MethodHandles.privateLookupIn(java.lang.Class<?>, java.lang.invoke.MethodHandles.Lookup)
-
-
getDeclaringClass
public Class<?> getDeclaringClass()
返回表示由该对象表示的方法的类或接口的Class
对象。- Specified by:
-
getDeclaringClass
在接口Member
- Specified by:
-
getDeclaringClass
在Executable
- 结果
- 一个表示底层成员声明类的对象
-
getName
public String getName()
返回由该方法
对象表示的方法的名称,作为String
。- Specified by:
-
getName
在接口Member
- Specified by:
-
getName
中的Executable
- 结果
- 底层成员的简单名称
-
getModifiers
public int getModifiers()
返回由该对象表示的可执行文件的Java语言modifiers 。- Specified by:
-
getModifiers
在接口Member
- Specified by:
-
getModifiers
在Executable
- 结果
- 底层成员的Java语言修饰符
- 另请参见:
-
Modifier
-
getTypeParameters
public TypeVariable<方法>[] getTypeParameters()
返回一个TypeVariable
对象的数组,表示由该GenericDeclaration
对象表示的通用声明声明的类型变量,声明顺序。 如果底层通用声明不声明类型变量,则返回长度为0的数组。- Specified by:
-
getTypeParameters
在接口GenericDeclaration
- Specified by:
-
getTypeParameters
在Executable
- 结果
-
一个
TypeVariable
对象的数组,表示此通用声明声明的类型变量 - 异常
-
GenericSignatureFormatError
- 如果此通用声明的通用签名不符合 The Java™ Virtual Machine Specification中指定的格式 - 从以下版本开始:
- 1.5
-
getReturnType
public Class<?> getReturnType()
返回一个Class
对象,表示由该方法
对象表示的方法的正式返回类型。- 结果
- 该对象表示的方法的返回类型
-
getGenericReturnType
public Type getGenericReturnType()
返回一个Type
对象,表示由该方法
对象表示的方法的正式返回类型。如果返回类型是参数化类型,则
Type
对象Type
必须准确反映源代码中使用的实际类型参数。如果返回类型是类型变量或参数化类型,则创建它。 否则解决。
- 结果
-
一个
Type
对象,代表底层方法的正式返回类型 - 异常
-
GenericSignatureFormatError
- 如果通用方法签名不符合 The Java™ Virtual Machine Specification中指定的格式 -
TypeNotPresentException
- 如果底层方法的返回类型是指不存在的类型声明 -
MalformedParameterizedTypeException
- 如果底层方法的返回类型是指由于任何原因无法实例化的参数化类型 - 从以下版本开始:
- 1.5
-
getParameterTypes
public Class<?>[] getParameterTypes()
返回一个Class
对象的数组,表示由该对象表示的可执行文件的声明顺序的形式参数类型。 如果底层可执行文件没有参数,则返回长度为0的数组。- Specified by:
-
getParameterTypes
在Executable
- 结果
- 该对象表示的可执行文件的参数类型
-
getParameterCount
public int getParameterCount()
返回由此对象表示的可执行文件的形式参数(无论是显式声明还是隐式声明)的数量。- 重写:
-
getParameterCount
在Executable
- 结果
- 该对象表示的可执行文件的形式参数的数量
- 从以下版本开始:
- 1.8
-
getGenericParameterTypes
public Type[] getGenericParameterTypes()
返回一个Type
对象的数组,Type
以声明顺序表示由该对象表示的可执行文件的形式参数类型。 如果底层可执行文件没有参数,则返回长度为0的数组。如果形式参数类型是参数化类型,则
Type
返回的Type
对象必须准确反映源代码中使用的实际类型参数。如果形式参数类型是类型变量或参数化类型,则会创建它。 否则解决。
- 重写:
-
getGenericParameterTypes
在Executable
- 结果
-
一个
Type
的数组,以声明顺序表示底层可执行文件的形式参数类型 - 异常
-
GenericSignatureFormatError
- 如果通用方法签名不符合 The Java™ Virtual Machine Specification中指定的格式 -
TypeNotPresentException
- 如果底层可执行文件的任何参数类型是指不存在的类型声明 -
MalformedParameterizedTypeException
- 如果任何基础可执行文件的参数类型是指由于任何原因无法实例化的参数化类型 - 从以下版本开始:
- 1.5
-
getExceptionTypes
public Class<?>[] getExceptionTypes()
返回一个Class
对象的数组,表示由该对象表示的底层可执行文件所声明的异常类型。 如果可执行程序在其throws
子句中不声明异常,则返回长度为0的数组。- Specified by:
-
getExceptionTypes
在Executable
- 结果
- 被该对象表示的可执行文件抛出的异常类型
-
getGenericExceptionTypes
public Type[] getGenericExceptionTypes()
返回一个Type
对象的数组,表示该可执行对象声明的异常声明。 如果底层可执行文件在其throws
子句中声明不存在异常,则返回长度为0的数组。如果异常类型是类型变量或参数化类型,则会创建它。 否则解决。
- 重写:
-
getGenericExceptionTypes
在Executable
- 结果
- 一组数组,表示底层可执行文件抛出的异常类型
- 异常
-
GenericSignatureFormatError
- 如果通用方法签名不符合 The Java™ Virtual Machine Specification中指定的格式 -
TypeNotPresentException
- 如果底层可执行文件的throws
子句引用不存在的类型声明 -
MalformedParameterizedTypeException
- 如果底层可执行文件的throws
子句是指由于任何原因无法实例化的参数化类型 - 从以下版本开始:
- 1.5
-
equals
public boolean equals(Object obj)
将此方法
与指定对象进行比较。 如果对象相同,则返回true。 两个Methods
是相同的,如果它们被同一个类声明并具有相同的名称和形式的参数类型和返回类型。- 重写:
-
equals
在Object
- 参数
-
obj
- 与之比较的参考对象。 - 结果
-
true
如果该对象与obj参数相同; 否则为false
。 - 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
返回这个方法
的哈希方法
。 哈希码被计算为底层方法声明类名称和方法名称的排他或哈希码。- 重写:
-
hashCode
在Object
- 结果
- 该对象的哈希码值。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
toString
public String toString()
返回一个描述这个方法
的字符串。 该字符串格式化为方法访问修饰符(如果有),后跟方法返回类型,后跟一个空格,后跟类声明方法,后跟一个句点,后跟方括号,后跟一个括号,逗号该方法的形式参数类型的分离列表。 如果该方法抛出检查异常,则参数列表后跟一个空格,后跟“throws
”,后面是抛出的异常类型的逗号分隔列表。 例如:public boolean java.lang.Object.equals(java.lang.Object)
访问修饰符按照“Java语言规范”指定的规范顺序放置。 这是
public
,protected
或private
以下顺序,然后再其它改性剂:abstract
,default
,static
,final
,synchronized
,native
,strictfp
。
-
toGenericString
public String toGenericString()
返回描述此方法
的字符串,包括类型参数。 该字符串格式化为方法访问修饰符(如果有),后跟一个方括号的类型参数的角括号括号的逗号分隔列表(如果有),后跟方法的通用返回类型,后跟一个空格,后跟类声明该方法后跟一个句点,后跟方法名称,后跟一个括号,逗号分隔的方法的通用形式参数类型列表。 如果该方法被声明为采用可变数量的参数,而不是将最后一个参数表示为“Type[]
”,则表示为“Type...
”。 一个空格用于将访问修饰符彼此和类型参数或返回类型分开。 如果没有类型参数,则类型参数列表将被删除; 如果存在类型参数列表,则将列表与类名称隔开。 如果该方法被声明为抛出异常,则参数列表后跟一个空格,后跟“throws
”,后跟通用抛出的异常类型的逗号分隔列表。访问修饰符按照“Java语言规范”指定的规范顺序放置。 这是
public
,protected
或private
以下顺序,然后再其它改性剂:abstract
,default
,static
,final
,synchronized
,native
,strictfp
。- Specified by:
-
toGenericString
在类Executable
- 结果
-
一个描述这个
方法
的字符串,包括类型参数 - 从以下版本开始:
- 1.5
- See The Java™ Language Specification:
- 8.4.3方法修饰符,9.4方法声明,9.6.1注释类型元素
-
invoke
public Object invoke(Object obj, Object... args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException
使用指定的参数调用由此方法
对象表示的基础方法。 个别参数自动展开以匹配原始形式参数,原始参考参数和参考参数都需要进行方法调用转换。如果底层方法是静态的,那么指定的
obj
参数将被忽略。 它可能为null。如果底层方法所需的形式参数的数量为0,则提供的
args
数组的长度为0或为空。如果底层方法是一个实例方法,它将使用动态方法查找来调用,如“Java语言规范”第二版第15.12.4.4节所述; 特别是将会发生基于目标对象的运行时类型的覆盖。
如果底层方法是静态的,则如果尚未初始化该方法,那么声明该方法的类将被初始化。
如果方法正常完成,则返回的值将返回给调用者; 如果值具有原始类型,则首先将其适当地包装在对象中。 但是,如果该值具有基本类型的数组的类型,则该数组的元素不会包含在对象中; 换句话说,返回一个原始类型的数组。 如果底层方法返回类型为void,则调用返回null。
- 参数
-
obj
- 从底层方法被调用的对象 -
args
- 用于方法调用的参数 - 结果
-
由该对象表示的方法调用
obj
的参数args
- 异常
-
IllegalAccessException
- 如果这个方法
对象正在强制执行Java语言访问控制,并且底层方法是无法访问的。 -
IllegalArgumentException
- 如果方法是一个实例方法,并且指定的对象参数不是声明底层方法(或其子类或实现者)的类或接口的实例; 如果实际和正式参数的数量不同; 如果原始参数的解包转换失败; 或者如果在可能的展开之后,通过方法调用转换,参数值不能转换为相应的形式参数类型。 -
InvocationTargetException
- 如果底层方法抛出异常。 -
NullPointerException
- 如果指定的对象为空,该方法为实例方法。 -
ExceptionInInitializerError
- 如果由此方法引发的初始化失败。
-
isBridge
public boolean isBridge()
如果此方法是桥接方法,则返回true
; 否则返回false
。- 结果
- 如果且仅当此方法是由Java语言规范定义的桥接方法,则为true。
- 从以下版本开始:
- 1.5
-
isVarArgs
public boolean isVarArgs()
如果这个可执行文件被声明为采用可变数量的参数,则返回true
; 否则返回false
。- 重写:
-
isVarArgs
在Executable
- 结果
-
true
如果只有这个可执行文件被声明为使用可变数量的参数。 - 从以下版本开始:
- 1.5
-
isSynthetic
public boolean isSynthetic()
如果这个可执行文件是一个合成的结构,返回true
; 否则返回false
。- Specified by:
-
isSynthetic
在接口Member
- 重写:
-
isSynthetic
在Executable
- 结果
- 如果且仅当此可执行文件是由 The Java™ Language Specification定义的合成结构, 则为真 。
- 从以下版本开始:
- 1.5
- See The Java™ Language Specification:
- 13.1二进制形式
-
isDefault
public boolean isDefault()
如果此方法是默认方法,则返回true
; 否则返回false
。 默认方法是公共非抽象实例方法,即具有主体的非静态方法,以接口类型声明。- 结果
- 如果且仅当此方法是由Java语言规范定义的默认方法,则为true。
- 从以下版本开始:
- 1.8
-
getDefaultValue
public Object getDefaultValue()
返回由此方法
实例表示的注释成员的默认值。 如果成员是原始类型,则返回相应包装器类型的实例。 如果没有默认与成员关联,或者方法实例不表示注释类型的声明成员,则返回null。- 结果
-
由该
方法
实例表示的注释成员的默认值。 - 异常
-
TypeNotPresentException
- 如果注释是类型Class
,并且没有找到默认类值的定义。 - 从以下版本开始:
- 1.5
-
getAnnotation
public <T extends Annotation> T getAnnotation(Class<T> annotationClass)
返回该元素的,如果这样的注释 ,否则返回null指定类型的注释。- Specified by:
-
getAnnotation
在接口AnnotatedElement
- 重写:
-
getAnnotation
在Executable
- 参数类型
-
T
- 要查询的注释类型,如果存在则返回 - 参数
-
annotationClass
- 对应于注释类型的Class对象 - 结果
- 该元素的注释指定的注释类型,如果存在于此元素,否则为null
- 异常
-
NullPointerException
- 如果给定的注释类为空 - 从以下版本开始:
- 1.5
-
getDeclaredAnnotations
public Annotation[] getDeclaredAnnotations()
返回直接存在于此元素上的注释。 此方法忽略继承的注释。 如果此元素上没有直接显示的注释,则返回值为长度为0的数组。此方法的调用者可以自由修改返回的数组; 它将对返回给其他调用者的数组没有影响。- Specified by:
-
getDeclaredAnnotations
在接口AnnotatedElement
- 重写:
-
getDeclaredAnnotations
在类Executable
- 结果
- 此元素上直接显示的注释
- 从以下版本开始:
- 1.5
-
getParameterAnnotations
public Annotation[][] getParameterAnnotations()
返回一个Annotation
s的数组数组,表示由该对象表示的Executable
的形式参数的声明顺序的注释。 合成和强制参数(见下面的说明),如内部类构造函数的外部“this”参数将在返回的数组中表示。 如果可执行文件没有参数(意思是没有正式的,没有合成的,没有强制的参数),那么将返回一个零长度的数组。 如果Executable
具有一个或多个参数,则对于没有注释的每个参数,返回长度为零的嵌套数组。 包含在返回的数组中的注释对象是可序列化的。 该方法的调用者可以自由修改返回的数组; 它将对返回给其他调用者的数组没有影响。 编译器可以添加在源(“强制”)中隐式声明的额外参数,以及在源(“合成”)中既不是隐式也不显式声明方法的参数列表的参数。 有关详细信息,请参阅Parameter
。- Specified by:
-
getParameterAnnotations
在Executable
- 结果
- 表示由该对象表示的可执行文件的声明顺序的形式和隐式参数上的注释数组
- 从以下版本开始:
- 1.5
- 另请参见:
-
Parameter
,Parameter.getAnnotations()
-
getAnnotatedReturnType
public AnnotatedType getAnnotatedReturnType()
返回一个AnnotatedType
对象,表示使用类型来指定此可执行文件所表示的方法/构造函数的返回类型。 如果此Executable
对象表示构造函数,则表示构造的对象的类型为AnnotatedType
。 如果这个Executable
对象表示一个方法,那么AnnotatedType
对象表示使用一个类型来指定方法的返回类型。- Specified by:
-
getAnnotatedReturnType
在Executable
- 结果
-
表示由该
Executable
表示的方法或构造函数的返回类型的对象 - 从以下版本开始:
- 1.8
-
-