T - 由此类对象建模的类的类型。
例如, String.class的类型是Class<String> 。
如果正在建模的类是未知的,请使用Class<?> 。
public final class Class<T> extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement
类表示正在运行的Java应用程序中的类和接口。
枚举是一种类,一个注释是一种界面。
每个数组也属于一个反映为类对象的类,该对象由具有相同元素类型和维数的所有数组共享。
原始Java类型( boolean , byte , char , short , int , long , float和double ),和关键字void也表示为类对象。
类没有公共构造函数。 相反, 类对象由Java虚拟机自动构建,因为加载了类,并且通过调用类加载器中的defineClass方法。
以下示例使用类对象来打印对象的类名称:
void printClassName(Object obj) {
System.out.println("The class of " + obj +
" is " + obj.getClass().getName());
}
也可以使用类文字获取类对象作为命名类型(或为void)。 参见The Java™ Language Specification第15.8.2节。 例如:
System.out.println("The name of class Foo is: "+Foo.class.getName());
ClassLoader.defineClass(byte[], int, int) ,
Serialized Form
| Modifier and Type | Method and Description |
|---|---|
<U> 类<? extends U> |
asSubclass(类<U> clazz)
类这个
类对象来表示由指定的类对象表示的类的子类。
|
T |
cast(Object obj)
施放一个目的是通过本表示的类或接口
类对象。
|
boolean |
desiredAssertionStatus()
如果要在调用此方法时初始化该类,则返回将分配给此类的断言状态。
|
static 类<?> |
forName(String className)
返回与给定字符串名称的类或接口相关联的
类对象。
|
static 类<?> |
forName(String name, boolean initialize, ClassLoader loader)
使用给定的类加载器返回与给定字符串名称的类或接口相关联的
类对象。
|
AnnotatedType[] |
getAnnotatedInterfaces()
返回一个
AnnotatedType对象的数组,
AnnotatedType使用类型指定由此
AnnotatedType对象表示的实体的超级
类 。
|
AnnotatedType |
getAnnotatedSuperclass()
返回一个
AnnotatedType对象,该对象表示使用类型来指定由此
类对象表示的实体的
类类。
|
<A extends Annotation> |
getAnnotation(类<A> annotationClass)
返回该元素的,如果这样的注释
,否则返回null指定类型的注释。
|
Annotation[] |
getAnnotations()
返回此元素上
存在的注释。
|
<A extends Annotation> |
getAnnotationsByType(类<A> annotationClass)
返回与此元素相关
联的注释 。
|
String |
getCanonicalName()
返回由Java语言规范定义的基础类的规范名称。
|
类<?>[] |
getClasses()
返回包含一个数组
类表示所有的公共类和由此表示的类的成员接口的对象
类对象。
|
ClassLoader |
getClassLoader()
返回类的类加载器。
|
类<?> |
getComponentType()
返回
类数组的组件类型的Class。
|
Constructor<T> |
getConstructor(类<?>... parameterTypes)
返回一个
Constructor对象,该对象反映
Constructor对象表示的类的指定的公共
类函数。
|
Constructor<?>[] |
getConstructors()
返回包含一个数组
Constructor对象反射由此表示的类的所有公共构造
类对象。
|
<A extends Annotation> |
getDeclaredAnnotation(类<A> annotationClass)
如果这样的注释
直接存在 ,则返回指定类型的元素注释,否则返回null。
|
Annotation[] |
getDeclaredAnnotations()
返回
直接存在于此元素上的注释。
|
<A extends Annotation> |
getDeclaredAnnotationsByType(类<A> annotationClass)
如果此类注释
直接存在或
间接存在,则返回该元素的注释(指定类型)。
|
类<?>[] |
getDeclaredClasses()
返回一个反映所有被这个
类对象表示的类的成员声明的类和
类对象的数组。
|
Constructor<T> |
getDeclaredConstructor(类<?>... parameterTypes)
返回一个
Constructor对象,该对象反映
Constructor对象表示的类或接口的指定
类函数。
|
Constructor<?>[] |
getDeclaredConstructors()
返回一个反映
Constructor对象表示的类声明的所有
Constructor对象的数组
类 。
|
Field |
getDeclaredField(String name)
返回一个
Field对象,它反映此表示的类或接口的指定已声明字段
类对象。
|
Field[] |
getDeclaredFields()
返回的数组
Field对象反映此表示的类或接口声明的所有字段
类对象。
|
方法 |
getDeclaredMethod(String name, 类<?>... parameterTypes)
返回一个
方法对象,它反映此表示的类或接口的指定声明的方法
类对象。
|
方法[] |
getDeclaredMethods()
返回包含一个数组
方法对象反射的类或接口的所有声明的方法,通过此表示
类对象,包括公共,保护,默认(包)访问和私有方法,但不包括继承的方法。
|
类<?> |
getDeclaringClass()
如果由此
类对象表示的类或接口是另一个类的成员,则返回表示其声明的类的
类对象。
|
类<?> |
getEnclosingClass()
返回底层类的即时封闭类。
|
Constructor<?> |
getEnclosingConstructor()
如果此 类对象表示构造函数中的本地或匿名类,则返回表示底层类的立即封闭构造函数的Constructor对象。
|
方法 |
getEnclosingMethod()
如果此 类对象表示方法中的本地或匿名类,则返回表示基础类的即时封闭方法的方法对象。
|
T[] |
getEnumConstants()
返回此枚举类的元素,如果此Class对象不表示枚举类型,则返回null。
|
Field |
getField(String name)
返回一个
Field对象,它反映此表示的类或接口的指定公共成员字段
类对象。
|
Field[] |
getFields()
返回包含一个数组
Field对象反射由此表示的类或接口的所有可访问的公共字段
类对象。
|
Type[] |
getGenericInterfaces()
返回
Type表示通过由该对象所表示的类或接口直接实现的接口秒。
|
Type |
getGenericSuperclass()
返回
Type表示此所表示的实体(类,接口,基本类型或void)的直接超类
类 。
|
类<?>[] |
getInterfaces()
确定由该对象表示的类或接口实现的接口。
|
方法 |
getMethod(String name, 类<?>... parameterTypes)
返回一个
方法对象,它反映此表示的类或接口的指定公共成员方法
类对象。
|
方法[] |
getMethods()
返回包含一个数组
方法对象反射由此表示的类或接口的所有公共方法
类对象,包括那些由类或接口和那些从超类和超接口继承的声明。
|
int |
getModifiers()
返回此类或接口的Java语言修饰符,以整数编码。
|
String |
getName()
返回由
类对象表示的实体(类,接口,数组类,原始类型或空白)的名称,作为
String 。
|
软件包 |
getPackage()
获取此类的包。
|
ProtectionDomain |
getProtectionDomain()
返回
ProtectionDomain 。
|
URL |
getResource(String name)
查找具有给定名称的资源。
|
InputStream |
getResourceAsStream(String name)
查找具有给定名称的资源。
|
Object[] |
getSigners()
获得这个类的签名者。
|
String |
getSimpleName()
返回源代码中给出的基础类的简单名称。
|
类<? super T> |
getSuperclass()
返回
类表示此所表示的实体(类,接口,基本类型或void)的超类
类 。
|
String |
getTypeName()
为此类型的名称返回一个内容丰富的字符串。
|
TypeVariable<类<T>>[] |
getTypeParameters()
返回一个
TypeVariable对象的数组,它们以声明顺序表示由此
GenericDeclaration对象表示的通用声明声明的类型变量。
|
boolean |
isAnnotation()
如果此
类对象表示注释类型,则返回true。
|
boolean |
isAnnotationPresent(类<? extends Annotation> annotationClass)
如果此元素上
存在指定类型的注释,则返回true,否则返回false。
|
boolean |
isAnonymousClass()
返回
true当且仅当基础类是匿名类时。
|
boolean |
isArray()
确定此
类对象是否表示数组类。
|
boolean |
isAssignableFrom(类<?> cls)
确定由此
类对象表示的类或接口是否与由指定的Class
类表示的类或接口相同或是超类或
类接口。
|
boolean |
isEnum()
当且仅当该类在源代码中被声明为枚举时才返回true。
|
boolean |
isInstance(Object obj)
确定指定的Object是否与此
Object表示的对象分配
类 。
|
boolean |
isInterface()
确定指定
类对象表示接口类型。
|
boolean |
isLocalClass()
返回
true当且仅当基础类是本地类时。
|
boolean |
isMemberClass()
返回
true当且仅当基础类是成员类时。
|
boolean |
isPrimitive()
确定指定
类对象表示一个基本类型。
|
boolean |
isSynthetic()
如果这个类是一个合成类,返回 true ;
返回false其他。
|
T |
newInstance()
创建由此
类对象表示的类的新实例。
|
String |
toGenericString()
返回描述此
类的字符串,包括有关修饰符和类型参数的信息。
|
String |
toString()
将对象转换为字符串。
|
public String toString()
getName 。
如果此类对象表示原始类型,则此方法返回原始类型的名称。
如果这个类对象表示void,则此方法返回“void”。
public String toGenericString()
类的字符串,包括有关修饰符和类型参数的信息。
该字符串格式类型修饰符列表,如果有的话,后面的那种类型(基本类型和空字符串class , 枚举 , interface ,或@ interface ,如适用),其次是类型的名称,然后是角色括号的类型参数的逗号分隔列表(如果有)。
一个空格用于将修饰符彼此分离,并将任何修饰符与该类型分隔开。
修饰符以规范的顺序发生。
如果没有类型参数,则类型参数列表将被删除。
请注意,由于正在生成关于类型的运行时间表示的信息,因此可能会存在始发源代码上不存在的修饰符或源于源代码的非法。
类的字符串,包括有关修饰符和类型参数的信息
public static 类<?> forName(String className) throws ClassNotFoundException
类对象。
调用此方法相当于:
Class.forName(className, true, currentLoader)
其中currentLoader表示当前类的定义类加载器。
例如,以下代码片段返回名为java.lang.Thread的类的运行时类描述java.lang.Thread :
Class t = Class.forName("java.lang.Thread")
对forName("X")的调用导致forName("X")名为X的类。
className - 所需类的完全限定名称。
类对象。
LinkageError - 如果链接失败
ExceptionInInitializerError - 如果由此方法引发的初始化失败
ClassNotFoundException - 如果该类无法找到
public static 类<?> forName(String name, boolean initialize, ClassLoader loader) throws ClassNotFoundException
类对象。
给定类或接口的完全限定名称(以getName返回的格式相同),此方法尝试查找,加载和链接类或接口。
指定的类加载器用于加载类或接口。
如果参数loader为空,则通过引导类加载器加载该类。
只有当initialize参数为true并且尚未被初始化时,该类才被初始化。
如果name表示原始类型或空白,将尝试在名称为name的未命名包中定位用户定义的类。 因此,该方法不能用于获取表示原始类型或void的任何类对象。
如果name表示数组类,则会加载数组类的组件类型,但未初始化。
例如,在一个实例方法中,表达式:
Class.forName("Foo")
相当于:
Class.forName("Foo", true, this.getClass().getClassLoader())
请注意,该方法会引发与Java语言规范的第12.2,12.3和12.4节中指定的加载,链接或初始化相关的错误。
请注意,此方法不检查请求的类是否可由其调用者访问。
如果loader是null ,并且安全管理器存在,并且调用者的类加载器不为空,则该方法调用具有RuntimePermission("getClassLoader")权限的安全管理器的checkPermission方法,以确保访问引导类加载器是可行的。
name - 所需类的完全限定名称
initialize - 如果true该类将被初始化。
请参见Java语言规范的第12.4节。
loader - 类加载器,从该类加载
LinkageError - 如果链接失败
ExceptionInInitializerError - 如果由此方法引发的初始化失败
ClassNotFoundException - 如果类不能被指定的类加载器定位
forName(String) , ClassLoader
public T newInstance() throws InstantiationException, IllegalAccessException
类对象表示的类的新实例。
该类被实例化为一个具有空参数列表的new表达式。
如果类尚未初始化,则初始化该类。
请注意,此方法传播由nullary构造函数抛出的任何异常,包括已检查的异常。 使用此方法有效地绕过编译器异常检查,否则将由编译器执行。 Constructor.newInstance方法通过在(检查) InvocationTargetException中包装构造函数抛出的任何异常来避免此问题。
IllegalAccessException - 如果类或其nullary构造函数不可访问。
InstantiationException - 如果这个类表示抽象类,接口,数组类,原语类型或void;
或者类没有空值构造函数;
或者由于某种其他原因,实例化失败。
ExceptionInInitializerError - 如果由此方法引发的初始化失败。
SecurityException -如果安全管理器
,S存在,并且调用者的类加载器是不一样或类加载器的当前类和调用的祖先
s.checkPackageAccess()拒绝访问包这个类的。
public boolean isInstance(Object obj)
Object表示的对象分配类 。
这种方法是Java语言instanceof操作符的动态等价物。
该方法返回true如果指定Object参数为非空并且可以转换为通过此表示的引用类型类对象不提高一个ClassCastException.它返回false否则。
具体来说,如果类对象表示一个声明的类,如果指定的Object参数是所表示的类(或其任何子类)的实例,则此方法返回true ; 它返回false其他。 如果此类对象表示数组类,此方法返回true如果指定Object参数可以被转换成通过一个标识转换或通过加宽引用转换阵列类的对象; 它返回false其他。 如果此类对象表示一个接口,此方法返回true如果类或指定的任何超类Object参数实现此接口; 它返回false其他。 如果此类对象表示原始类型,则此方法返回false 。
obj - 要检查的对象
obj是这个类的一个实例,则为true
public boolean isAssignableFrom(类<?> cls)
类对象表示的类或接口是否与由指定的Class 类表示的类或接口相同或是超类或类接口。
如果是,则返回true ;
否则返回false 。
如果此类对象表示基本类型,则如果指定的类参数正好是类对象,则此方法返回true ;
否则返回false 。
具体来说,该方法通过标识转换或扩展参考转换来测试由指定的Class 类表示的类型是否可以转换为由此类对象表示的类型。 有关详细信息,请参阅Java语言规范 5.1.1和5.1.4节。
cls - 要检查的
类对象
boolean值表示可以将类型为
cls对象分配给此类的对象
NullPointerException - 如果指定的Class参数为null。
public boolean isInterface()
类对象表示接口类型。
true如果此对象表示一个接口;
false否则。
public boolean isArray()
类对象是否表示数组类。
true如果此对象表示数组类;
false否则。
public boolean isPrimitive()
类对象表示一个基本类型。
有九个预定类对象代表八个原始类型和void。 这些是由Java虚拟机创建,并且具有相同的名称为他们所代表的基本类型,即boolean , byte , char , short , int , long , float和double 。
这些对象只能通过以下公共静态最终变量访问,并且是该方法返回true的唯一类对象。
Boolean.TYPE ,
Character.TYPE ,
Byte.TYPE ,
Short.TYPE ,
Integer.TYPE ,
Long.TYPE ,
Float.TYPE ,
Double.TYPE ,
Void.TYPE
public boolean isAnnotation()
类对象表示注释类型,则返回true。
请注意,如果此方法返回true,则isInterface()也将返回true,因为所有注释类型也是接口。
true如果此类对象表示注释类型;
false否则
public boolean isSynthetic()
true如果这个类是一个合成类;
返回false其他。
true当且仅当此类是由Java语言规范定义的合成类时。
public String getName()
类对象表示的实体的名称(类,接口,数组类,原始类型或void),作为String 。
如果此类对象表示不是数组类型的引用类型,则返回类的二进制名称,如The Java™ Language Specification所指定 。
如果此类对象表示一个原始类型或空值,那么返回的名称是一个String等于对应于原始类型或void的Java语言关键字。
如果此类对象表示一个数组类型,则该名称的内部形式由表示数组嵌套深度的一个或多个“ [ ”字符前面的元素类型的名称组成。 元素类型名称的编码如下:
Element Type Encoding boolean Z byte B char C class or interface Lclassname; double D float F int I long J short S
类或接口名称classname是上面指定的类的二进制名称。
例子:
String.class.getName()
returns "java.lang.String"
byte.class.getName()
returns "byte"
(new Object[3]).getClass().getName()
returns "[Ljava.lang.Object;"
(new int[3][4][5][6][7][8][9]).getClass().getName()
returns "[[[[[[[I"
public ClassLoader getClassLoader()
如果安全管理器存在,并且调用者的类加载器不为空,并且调用者的类加载器与请求类加载器的类的类加载器不同或者是一个祖先,则该方法调用安全管理器的checkPermission方法具有RuntimePermission("getClassLoader")权限,以确保访问类加载器的类。
如果此对象表示原始类型或空值,则返回null。
SecurityException - 如果安全管理器存在,并且其
checkPermission方法拒绝访问该类的类加载器。
ClassLoader , SecurityManager.checkPermission(java.security.Permission) , RuntimePermission
public TypeVariable<类<T>>[] getTypeParameters()
TypeVariable对象的数组,它们以声明顺序表示由此GenericDeclaration对象表示的通用声明声明的类型变量。
如果底层通用声明不声明类型变量,则返回长度为0的数组。
getTypeParameters在界面
GenericDeclaration
TypeVariable对象,表示由此通用声明声明的类型变量
GenericSignatureFormatError - 如果此通用声明的通用签名不符合The Java™ Virtual Machine Specification中
指定的格式
public 类<? super T> getSuperclass()
类表示此所表示的实体(类,接口,基本类型或void)的超类类 。
如果这个类表示Object类,接口,原始类型或void,则返回null。
如果此对象表示数组类,则返回表示Object类的类对象。
public Type getGenericSuperclass()
Type表示此所表示的实体(类,接口,基本类型或void)的直接超类类 。
如果超类是参数化类型,返回的Type对象必须准确反映源代码中使用的实际类型参数。 如果以前没有创建表示超类的参数化类型。 有关参数化类型创建过程的语义,请参见ParameterizedType的声明 。 如果这个类表示Object类,接口,原始类型或void,则返回null。 如果此对象表示数组类,则返回表示Object类的类对象。
GenericSignatureFormatError - 如果通用类签名不符合The Java™ Virtual Machine Specification中
指定的格式
TypeNotPresentException - 如果通用超类引用不存在的类型声明
MalformedParameterizedTypeException - 如果通用超类引用了由于任何原因无法实例化的参数化类型
public 软件包 getPackage()
仅当信息在类中附带的清单中定义,并且类加载器使用清单中的属性创建包实例时,软件包才具有版本和规范的属性。
public 类<?>[] getInterfaces()
如果此对象表示一个类,则返回值是包含表示该类实现的所有接口的对象的数组。 数组中的接口对象的顺序对应于由此对象表示的类的声明的implements子句中的接口名称的顺序。 例如,给出声明:
class Shimmer implements FloorWax, DessertTopping { ... }
假设的值s是实例Shimmer ;
表达式的值:
s.getClass().getInterfaces()[0]
是类对象,代表接口FloorWax ;
和的价值:
s.getClass().getInterfaces()[1]
是类对象,表示接口DessertTopping 。
如果此对象表示接口,则该数组包含表示接口扩展的所有接口的对象。 数组中接口对象的顺序对应于由该对象表示的接口的声明的extends子句中的接口名称的顺序。
如果此对象表示不实现接口的类或接口,则该方法返回长度为0的数组。
如果此对象表示原始类型或void,则该方法返回长度为0的数组。
如果此类对象表示数组类型,那么按照该顺序返回接口Cloneable和java.io.Serializable 。
public Type[] getGenericInterfaces()
Type表示通过由该对象所表示的类或接口直接实现的接口秒。
如果超级接口是参数化类型,返回的Type对象必须准确反映源代码中使用的实际类型参数。 如果以前没有创建表示每个超级接口的参数化类型。 有关参数化类型创建过程的语义,请参见ParameterizedType的声明 。
如果此对象表示一个类,则返回值是包含表示该类实现的所有接口的对象的数组。 数组中接口对象的顺序对应于该对象表示的类的声明的implements子句中接口名称的顺序。 在数组类的情况下,按照该顺序返回接口Cloneable和Serializable 。
如果此对象表示一个接口,则该数组包含表示接口直接扩展的所有接口的对象。 数组中接口对象的顺序对应于由此对象表示的接口的声明的extends子句中的接口名称的顺序。
如果此对象表示不实现接口的类或接口,则该方法返回长度为0的数组。
如果此对象表示原始类型或void,则该方法返回长度为0的数组。
GenericSignatureFormatError - 如果通用类签名不符合The Java™ Virtual Machine Specification中
指定的格式
TypeNotPresentException - 如果任何一个通用超级接口引用不存在的类型声明
MalformedParameterizedTypeException - 如果任何一个通用超级接口是指由于任何原因而无法实例化的参数化类型
public 类<?> getComponentType()
类数组的组件类型的Class。
如果此类不表示数组类,则此方法返回null。
类此类的组件类型,如果此类是数组
Array
public int getModifiers()
public , protected , private , final , static , abstract和interface ;
应使用Modifier类的方法进行解码。
如果底层类是一个数组类,则其public , private和protected改性剂是相同的组分的类型。 如果这个类代表一个原始类型或空白,它的public修饰符始终是true ,其protected和private修饰符始终为false 。 如果此对象表示数组类,则为原始类型或空格,则其final修饰符始终为true ,其接口修饰符始终为false 。 其他修饰符的值不由本规范确定。
修改器编码在Java虚拟机规范表4.1中定义。
int表示该类修饰符
Modifier
public Object[] getSigners()
public 方法 getEnclosingMethod() throws SecurityException
null 。
SecurityException - 如果安全管理员s存在,并且满足以下任何条件:
s.checkPermission方法的调用与RuntimePermission("accessDeclaredMembers")拒绝访问封闭类中的方法 s.checkPackageAccess()拒绝访问封装类的包 public Constructor<?> getEnclosingConstructor() throws SecurityException
类对象表示构造函数中的本地或匿名类,则返回一个表示底层类的立即封闭构造函数的Constructor对象。
返回null其他。
特别地,此方法返回null当底层类是立即由类型声明,实例初始化或静态初始化包围的本地或匿名类。
null 。
SecurityException - 如果安全管理员s存在,并符合以下任何条件:
s.checkPermission方法的RuntimePermission("accessDeclaredMembers")拒绝访问封闭类中的构造函数 s.checkPackageAccess()拒绝访问封装类的包 public 类<?> getDeclaringClass() throws SecurityException
类对象表示的类或接口是另一个类的成员,则返回表示其声明的类的类对象。
如果此类或接口不是任何其他类的成员,则此方法返回null。
如果这个类对象表示一个数组类,一个原始类型或者void,那么这个方法返回null。
SecurityException - 如果安全管理员
s存在,并且调用者的类加载器与声明类的类加载器不相同或者祖先,并且调用
s.checkPackageAccess()拒绝访问声明类的包
public 类<?> getEnclosingClass() throws SecurityException
null 。
SecurityException -如果安全管理器
,S存在,并且调用者的类加载器是不一样或类加载器的封装类和调用的祖先
s.checkPackageAccess()拒绝该包的封装类的访问
public String getSimpleName()
数组的简单名称是附加了“[]”的组件类型的简单名称。 特别是组件类型为匿名的数组的简单名称是“[]”。
public String getTypeName()
getTypeName在界面
Type
public String getCanonicalName()
null null。
public boolean isAnonymousClass()
true当且仅当基础类是匿名类时。
true当且仅当此类是匿名类时。
public boolean isLocalClass()
true当且仅当基础类是本地类时。
true当且仅当此类是本地类时。
public boolean isMemberClass()
true当且仅当基础类是成员类时。
true当且仅当此类是成员类时。
public 类<?>[] getClasses()
类表示所有的公共类和由此表示的类的成员接口的对象类对象。
这包括继承自类的公共类和接口成员以及该类声明的公共类和接口成员。
如果此类对象没有公共成员类或接口,则此方法返回一个长度为0的数组。
如果这个类对象表示一个原始类型,一个数组类或者void,该方法也返回一个长度为0的数组。
类对象的数组
SecurityException -如果安全管理器
,S存在,并且调用者的类加载器是不一样或类加载器的当前类和调用的祖先
s.checkPackageAccess()拒绝访问包这个类的。
public Field[] getFields() throws SecurityException
Field对象反射由此表示的类或接口的所有可访问的公共字段类对象。
如果此类对象表示没有无法访问的公共字段的类或接口,则此方法返回长度为0的数组。
如果这个类对象表示一个类,那么这个方法返回该类及其所有超类的公共字段。
如果此类对象表示一个接口,则该方法返回接口及其所有超级接口的字段。
如果这个类对象表示一个数组类型,一个基本类型或者void,那么这个方法返回一个长度为0的数组。
返回的数组中的元素不会被排序,并且不是以任何特定的顺序。
Field对象的数组
SecurityException -如果安全管理器
,S存在,并且调用者的类加载器是不一样或类加载器的当前类和调用的祖先
s.checkPackageAccess()拒绝访问包这个类的。
public 方法[] getMethods() throws SecurityException
方法对象反射由此表示的类或接口的所有公共方法类对象,包括那些由类或接口和那些从超类和超接口继承的声明。
如果此类对象表示具有多个具有相同名称和参数类型但具有不同返回类型的公共方法的类型,则返回的数组对于每个此类方法都有一个方法对象。
如果此类对象表示与类初始化方法的类型<clinit> ,则返回的阵列不具有相应的方法对象。
如果此类对象表示一个数组类型,则返回的阵列具有方法对于每个由阵列类型从继承的公共方法对象Object 。 它不包含方法对象clone() 。
如果此类对象表示一个接口,那么返回的数组不包含任何隐含声明的方法,从Object 。 因此,如果在此接口或其任何超级接口中没有显式声明方法,则返回的数组的长度为0.(注意,表示类的类对象始终具有从Object公共方法)。
如果此类对象表示原始类型或空值,则返回的数组的长度为0。
由此类对象表示的类或接口的超级接口中声明的静态方法不被视为类或接口的成员。
返回的数组中的元素不会被排序,并且不是以任何特定的顺序。
方法对象的数组
SecurityException - 如果存在安全管理员
s ,并且调用者的类加载器与当前类的类加载器不同或者祖先,并且调用
s.checkPackageAccess(),
则拒绝对该类的包的访问。
public Constructor<?>[] getConstructors() throws SecurityException
Constructor对象表示的类的所有公共类函数。
如果类没有公共构造函数,或者类是数组类,或类反映原始类型或void时,返回长度为0的数组。
请注意,虽然此方法返回一个Constructor<T>对象(这是Constructor<T>构造函数数组)的数组,但此方法的返回类型为Constructor<?>[] ,而不是 Constructor<T>[] 。
这种信息较少的返回类型是必要的,因为从该方法返回后,可以修改数组以容纳不同类的Constructor对象,这将违反Constructor<T>[]的类型Constructor<T>[] 。
Constructor对象的数组
SecurityException -如果安全管理器
,S存在,并且调用者的类加载器是不一样或类加载器的当前类和调用的祖先
s.checkPackageAccess()拒绝访问包这个类的。
public Field getField(String name) throws NoSuchFieldException, SecurityException
Field对象,它反映此表示的类或接口的指定公共成员字段类对象。
name参数是一个String ,指定所需字段的简单名称。
要反映的字段由以下算法确定。 让C成为由该对象表示的类或接口:
NoSuchFieldException 。 如果此类对象表示数组类型,则此方法不会找到数组类型的length字段。
name - 字段名称
Field对象由
name
NoSuchFieldException - 如果找不到指定名称的字段。
NullPointerException - 如果
name是
null
SecurityException -如果安全管理器
,S存在,并且调用者的类加载器是不一样或类加载器的当前类和调用的祖先
s.checkPackageAccess()拒绝访问包这个类的。
public 方法 getMethod(String name, 类<?>... parameterTypes) throws NoSuchMethodException, SecurityException
方法对象,它反映此表示的类或接口的指定公共成员方法类对象。
name参数是一个String它指定了所需方法的简单名称。
parameterTypes参数是以声明顺序标识方法的形式参数类型的类对象的数组。
如果parameterTypes是null ,它被视为一个空数组。
如果name是“ <init> ”或“ <clinit> ”,则提出NoSuchMethodException 。 否则,要反映的方法由以下算法确定。 让C成为由该对象表示的类或接口:
Object以外的类,则该算法在C的超类上递归调用 Object类,或者如果C是一个接口,则搜索C(如果有的话)的超接口匹配方法。 如果找到这样的方法,就会被反映出来。 在类或接口C中找到匹配的方法C:如果C声明一个具有指定名称和完全相同的形式参数类型的公共方法,那就是反映的方法。 如果在C中找到不止一种这样的方法,并且这些方法之一具有比任何其他方法更具体的返回类型,则反映该方法; 否则其中一种方法是任意选择的。
请注意,类中可能有多个匹配方法,因为Java语言禁止一个类声明具有相同签名但返回类型不同的多个方法,Java虚拟机不会。 虚拟机中增加的灵活性可以用于实现各种语言特征。 例如,协变回报可以用bridge methods实现 ; 桥接方法和被覆盖的方法将具有相同的签名但不同的返回类型。
如果此类对象表示数组类型,则此方法找不到clone()方法。
由该类对象表示的类或接口的超级接口中声明的静态方法不被认为是类或接口的成员。
name - 方法的名称
parameterTypes - 参数列表
方法对象匹配指定的
name和
parameterTypes
NoSuchMethodException - 如果没有找到匹配的方法,或者名称是“<init>”还是“<clinit>”。
NullPointerException - 如果
name是
null
SecurityException -如果安全管理器
,S存在,并且调用者的类加载器是不一样或类加载器的当前类和调用的祖先
s.checkPackageAccess()拒绝访问包这个类的。
public Constructor<T> getConstructor(类<?>... parameterTypes) throws NoSuchMethodException, SecurityException
Constructor对象,该对象反映Constructor对象表示的类的指定的公共类函数。
parameterTypes参数是以声明顺序标识构造函数的形式参数类型的类对象的数组。
如果此类对象表示在非静态上下文中声明的内部类,则形式参数类型将显式包围实例作为第一个参数。
反映的构造是这样表示的类的公共构造类对象,其形式参数类型匹配那些由指定的parameterTypes 。
parameterTypes - 参数数组
Constructor公共构造匹配指定的对象
parameterTypes
NoSuchMethodException - 如果找不到匹配的方法。
SecurityException -如果安全管理器
,S存在,并且调用者的类加载器是不一样或类加载器的当前类和调用的祖先
s.checkPackageAccess()拒绝访问包这个类的。
public 类<?>[] getDeclaredClasses() throws SecurityException
类对象反映声明此表示的类的成员的所有类和接口类对象。
这包括public,protected,default(package)访问以及该类声明的私有类和接口,但不包括继承的类和接口。
该方法返回一个长度为0的数组,如果该类不声明任何类或接口作为成员,或者这个类对象表示一个原始类型,一个数组类或者空。
类此类的所有声明成员的
类对象的数组
SecurityException -如果安全管理器,S存在任何下列条件得到满足:
s.checkPermission法RuntimePermission("accessDeclaredMembers")这个类中拒绝该声明的类访问 s.checkPackageAccess()拒绝访问此类的包 public Field[] getDeclaredFields() throws SecurityException
Field对象反映此表示的类或接口声明的所有字段类对象。
这包括公共,受保护,默认(包)访问和私有字段,但不包括继承的字段。
如果此类对象表示没有声明字段的类或接口,则此方法返回长度为0的数组。
如果此类对象表示数组类型,则为原始类型或void,则此方法返回长度为0的数组。
返回的数组中的元素不会被排序,并且不是以任何特定的顺序。
Field对象的数组
SecurityException - 如果安全管理员s存在,并符合以下任何条件:
s.checkPermission方法与RuntimePermission("accessDeclaredMembers")拒绝访问此类中声明的字段 s.checkPackageAccess()拒绝访问此类的包 public 方法[] getDeclaredMethods() throws SecurityException
方法对象反射的类或接口的所有声明的方法,通过此表示类对象,包括公共,保护,默认(包)访问和私有方法,但不包括继承的方法。
如果此类对象表示具有多个具有相同名称和参数类型但具有不同返回类型的声明方法的类型,则返回的数组对于每个此类方法都有一个方法对象。
如果此类对象表示具有类初始化方法的类型<clinit> ,则返回的阵列不具有相应的方法对象。
如果此类对象表示没有声明方法的类或接口,则返回的数组的长度为0。
如果这个类对象表示一个数组类型,一个基本类型,或者是void,则返回的数组的长度为0。
返回的数组中的元素不会被排序,并且不是以任何特定的顺序。
方法此类的所有声明方法的
方法对象的数组
SecurityException -如果安全管理器,S存在任何下列条件得到满足:
s.checkPermission方法,使用RuntimePermission("accessDeclaredMembers")拒绝访问此类中声明的方法 s.checkPackageAccess()拒绝访问此类的包 public Constructor<?>[] getDeclaredConstructors() throws SecurityException
Constructor对象表示的类声明的所有Constructor对象的数组类 。
这些是public,protected,default(package)访问和私有构造函数。
返回的数组中的元素不会排序,并且不是任何特定的顺序。
如果类有一个默认构造函数,它将包含在返回的数组中。
如果类对象表示接口,原始类型,数组类或空值,则此方法返回长度为0的数组。
请参阅Java语言规范 ,第8.2节。
Constructor对象的数组
SecurityException - 如果安全管理员s存在,并符合以下任何条件:
s.checkPermission方法与RuntimePermission("accessDeclaredMembers")拒绝访问此类中声明的构造函数 s.checkPackageAccess()拒绝访问此类的包 public Field getDeclaredField(String name) throws NoSuchFieldException, SecurityException
Field对象,它反映此表示的类或接口的指定已声明字段类对象。
name参数是一个String ,它指定了所需字段的简单名称。
如果此类对象表示数组类型,则此方法不会找到数组类型的length字段。
name - 字段的名称
Field中指定字段的
Field对象
NoSuchFieldException - 如果找不到指定名称的字段。
NullPointerException - 如果
name是
null
SecurityException -如果安全管理器,S存在任何下列条件得到满足:
s.checkPermission方法与RuntimePermission("accessDeclaredMembers")拒绝访问已声明的字段 s.checkPackageAccess()拒绝访问此类的包 public 方法 getDeclaredMethod(String name, 类<?>... parameterTypes) throws NoSuchMethodException, SecurityException
方法对象,它反映此表示的类或接口的指定声明的方法类对象。
name参数是一个String ,它指定了所需方法的简单名称, parameterTypes参数是以声明顺序标识方法的形式参数类型的类对象的数组。
如果在一个类中声明具有相同参数类型的多个方法,并且其中一个方法的返回类型比其他任何方法更具体,返回该方法;
否则其中一种方法是任意选择的。
如果名称为“<init>”或“<clinit>”,则提出NoSuchMethodException 。
如果此类对象表示数组类型,则此方法找不到clone()方法。
name - 方法的名称
parameterTypes - 参数数组
方法对象为此类的方法匹配指定的名称和参数
NoSuchMethodException - 如果找不到匹配的方法。
NullPointerException - 如果
name是
null
SecurityException - 如果安全管理员s存在,并符合以下任何条件:
s.checkPermission方法与RuntimePermission("accessDeclaredMembers")拒绝访问已声明的方法 s.checkPackageAccess()拒绝访问此类的包 public Constructor<T> getDeclaredConstructor(类<?>... parameterTypes) throws NoSuchMethodException, SecurityException
Constructor对象,该对象反映Constructor对象表示的类或接口的指定类函数。
parameterTypes参数是以声明顺序标识构造函数的形式参数类型的类对象的数组。
如果此类对象表示在非静态上下文中声明的内部类,则形式参数类型将显式包围实例作为第一个参数。
parameterTypes - 参数数组
Constructor对象为具有指定参数列表的构造函数
NoSuchMethodException - 如果找不到匹配的方法。
SecurityException -如果安全管理器,S存在任何下列条件得到满足:
s.checkPermission方法与RuntimePermission("accessDeclaredMembers")拒绝访问声明的构造函数 s.checkPackageAccess()拒绝访问此类的包 public InputStream getResourceAsStream(String name)
ClassLoader.getSystemResourceAsStream(java.lang.String) 。
在委派之前,使用此算法从给定资源名称构建绝对资源名称:
name以'/' ( '\u002f' )开头,则资源的绝对名称是name之后的'/'的部分。
modified_package_name/name
modified_package_name是'/'替换'.' ( '\u002e' )的该对象的包名称。
name - 所需资源的名称
InputStream对象或null如果没有找到具有此名称的资源
NullPointerException - 如果
name是
null
public URL getResource(String name)
ClassLoader.getSystemResource(java.lang.String) 。
在委派之前,使用此算法从给定资源名称构建绝对资源名称:
name以'/' ( '\u002f' )开头,那么资源的绝对名称是name之后的'/'的部分。
modified_package_name/name
modified_package_name是'/'代替'.' ( '\u002e' )的该对象的包名称。
name - 所需资源的名称
URL对象或null如果没有找到具有此名称的资源
public ProtectionDomain getProtectionDomain()
ProtectionDomain 。
如果安装了一个安全管理员,此方法首先会使用RuntimePermission("getProtectionDomain")权限调用安全管理器的checkPermission方法,以确保获得ProtectionDomain 。
SecurityException - 如果安全管理器存在,并且其
checkPermission方法不允许获取ProtectionDomain。
ProtectionDomain , SecurityManager.checkPermission(java.security.Permission) , RuntimePermission
public boolean desiredAssertionStatus()
几乎没有程序员需要这种方法; 它为JRE本身的利益而提供。 (它允许类在当时确定它是否被初始化是否应该启用断言。)请注意,该方法不能保证返回与(或将)与指定类相关联的实际断言状态,或将被)初始化。
public boolean isEnum()
public T[] getEnumConstants()
public T cast(Object obj)
类对象。
obj - 要投射的对象
ClassCastException - 如果对象不为空并且不能分配给类型T.
public <U> 类<? extends U> asSubclass(类<U> clazz)
类这个类对象来表示由指定的类对象表示的类的子类。
检查演员是否有效,如果不是,则抛出一个ClassCastException 。
如果此方法成功,它将始终返回此类对象的引用。
当客户端需要“缩小” 类对象的类型以将其传递给类其愿意接受的类对象的API时,此方法非常有用。 转换将生成编译时警告,因为在运行时无法检查转换的正确性(因为通用类型通过擦除来实现)。
U - 将此类对象转换为的类型
clazz - 将此类对象转换为类的类
类对象,转换为表示指定类对象的子类。
ClassCastException - 如果这个
类对象不表示指定类的子类(这里“子类”包括该类本身)。
public <A extends Annotation> A getAnnotation(类<A> annotationClass)
AnnotatedElement复制
getAnnotation在界面
AnnotatedElement
A - 要查询的注释的类型,如果存在则返回
annotationClass - 对应于注释类型的Class对象
NullPointerException - 如果给定的注释类为空
public boolean isAnnotationPresent(类<? extends Annotation> annotationClass)
此方法返回的真值相当于: getAnnotation(annotationClass) != null
默认方法的主体被指定为上述代码。
isAnnotationPresent在界面
AnnotatedElement
annotationClass - 对应于注释类型的Class对象
NullPointerException - 如果给定的注释类为空
public <A extends Annotation> A[] getAnnotationsByType(类<A> annotationClass)
AnnotatedElement复制
AnnotatedElement.getAnnotation(Class)之间的区别在于此方法检测其参数是否为可重复注释类型 (JLS 9.6),如果是,则尝试通过“查看”容器注释来查找该类型的一个或多个注释。
该方法的调用者可以自由修改返回的数组;
它将对返回给其他调用者的数组没有影响。
getAnnotationsByType在界面
AnnotatedElement
A - 要查询的注释类型,如果存在则返回
annotationClass - 对应于注释类型的Class对象
NullPointerException - 如果给定的注释类为空
public Annotation[] getAnnotations()
AnnotatedElement复制
getAnnotations在界面
AnnotatedElement
public <A extends Annotation> A getDeclaredAnnotation(类<A> annotationClass)
AnnotatedElement复制
getDeclaredAnnotation在界面
AnnotatedElement
A - 查询的注释类型,如果直接出现则返回
annotationClass - 对应于注释类型的Class对象
NullPointerException - 如果给定的注释类为空
public <A extends Annotation> A[] getDeclaredAnnotationsByType(类<A> annotationClass)
AnnotatedElement复制
AnnotatedElement.getDeclaredAnnotation(Class)之间的区别在于该方法检测其参数是否是可重复注释类型 (JLS 9.6),以及如果是,尝试通过“查看”容器注释(如果存在)来查找该类型的一个或多个注释。
该方法的调用者可以自由修改返回的数组;
它将对返回给其他调用者的数组没有影响。
getDeclaredAnnotationsByType在界面
AnnotatedElement
A - 直接或间接出现时查询和返回的注释类型
annotationClass - 对应于注释类型的Class对象
NullPointerException - 如果给定的注释类为空
public Annotation[] getDeclaredAnnotations()
AnnotatedElement复制
getDeclaredAnnotations在界面
AnnotatedElement
public AnnotatedType getAnnotatedSuperclass()
AnnotatedType对象,表示使用类型来指定由此类对象表示的实体的类类。
( 使用 Foo类型指定“...扩展Foo”中的超类与Foo类型的声明不同)
如果此类对象表示类型,其声明中并没有明确表示注解的父类,则返回值是AnnotatedType表示不带注释的元素对象。
如果这个类表示Object类,接口类型,数组类型,基元类型或void,则返回值为null 。
public AnnotatedType[] getAnnotatedInterfaces()
AnnotatedType对象的数组, AnnotatedType使用类型指定由此AnnotatedType对象表示的实体的超级类 。
(在“...实现Foo”中使用 Foo类型指定一个超级接口与Foo类型的声明不同)
如果这个类对象表示一个类,则返回值是一个数组,其中包含表示使用接口类型指定该类实现的接口的对象。 数组中对象的顺序对应于此类对象声明的'implements'子句中使用的接口类型的顺序。
如果此类对象表示一个接口,则返回值是包含表示使用接口类型的对象的数组,用于指定接口直接扩展的接口。 数组中对象的顺序对应于此类对象的声明的'extends'子句中使用的接口类型的顺序。
如果此类对象表示其声明未明确指示任何带注释的超级接口的类或接口,则返回值为长度为0的数组。
如果此类对象表示Object类,数组类型,原始类型或空值,则返回值为长度为0的数组。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.