JavaTM 2 Platform
Standard Ed. 6

java.lang
类 Class<T>

java.lang.Object
  继承者 java.lang.Class<T>
类型参数:
T - 由此 Class 对象建模的类的类型。例如,String.class 的类型是 Class<String>。如果将被建模的类未知,则使用 Class<?>
所有已实现的接口:
Serializable, AnnotatedElement, GenericDeclaration, Type

public final class Class<T>
extends Object
implements Serializable, GenericDeclaration, Type, AnnotatedElement

Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。基本的 Java 类型(booleanbytecharshortintlongfloatdouble)和关键字 void 也表示为 Class 对象。

Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的。

以下示例使用 Class 对象来显示对象的类名:

     void printClassName(Object obj) {
         System.out.println("The class of " + obj +
                            " is " + obj.getClass().getName());
     }
 

还可以使用一个类字面值(JLS Section 15.8.2)来获取指定类型(或 void)的 Class 对象。例如:

     System.out.println("The name of class Foo is: "+Foo.class.getName());
 

从以下版本开始:
JDK1.0
另请参见:
ClassLoader.defineClass(byte[], int, int), 序列化表格

方法摘要
<U> Class<? extends U>
asSubclass(Class<U> clazz)
          强制转换该 Class 对象,以表示指定的 class 对象所表示的类的一个子类。
 T cast(Object obj)
          将一个对象强制转换成此 Class 对象所表示的类或接口。
 boolean desiredAssertionStatus()
          如果要在调用此方法时将要初始化该类,则返回将分配给该类的断言状态。
static Class<?> forName(String className)
          返回与带有给定字符串名的类或接口相关联的 Class 对象。
static Class<?> forName(String name, boolean initialize, ClassLoader loader)
          使用给定的类加载器,返回与带有给定字符串名的类或接口相关联的 Class 对象。
<A extends Annotation>
A
getAnnotation(Class<A> annotationClass)
          如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。
 Annotation[] getAnnotations()
          返回此元素上存在的所有注释。
 String getCanonicalName()
          返回 Java Language Specification 中所定义的底层类的规范化名称。
 Class<?>[] getClasses()
          返回一个包含某些 Class 对象的数组,这些对象表示属于此 Class 对象所表示的类的成员的所有公共类和接口。
 ClassLoader getClassLoader()
          返回该类的类加载器。
 Class<?> getComponentType()
          返回表示数组组件类型的 Class
 Constructor<T> getConstructor(Class<?>... parameterTypes)
          返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。
 Constructor<?>[] getConstructors()
          返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法。
 Annotation[] getDeclaredAnnotations()
          返回直接存在于此元素上的所有注释。
 Class<?>[] getDeclaredClasses()
          返回 Class 对象的一个数组,这些对象反映声明为此 Class 对象所表示的类的成员的所有类和接口。
 Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
          返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法。
 Constructor<?>[] getDeclaredConstructors()
          返回 Constructor 对象的一个数组,这些对象反映此 Class 对象表示的类声明的所有构造方法。
 Field getDeclaredField(String name)
          返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。
 Field[] getDeclaredFields()
          返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。
 Method getDeclaredMethod(String name, Class<?>... parameterTypes)
          返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。
 Method[] getDeclaredMethods()
          返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。
 Class<?> getDeclaringClass()
          如果此 Class 对象所表示的类或接口是另一个类的成员,则返回的 Class 对象表示该对象的声明类。
 Class<?> getEnclosingClass()
          返回底层类的立即封闭类。
 Constructor<?> getEnclosingConstructor()
          如果该 Class 对象表示构造方法中的一个本地或匿名类,则返回 Constructor 对象,它表示底层类的立即封闭构造方法。
 Method getEnclosingMethod()
          如果此 Class 对象表示某一方法中的一个本地或匿名类,则返回 Method 对象,它表示底层类的立即封闭方法。
 T[] getEnumConstants()
          如果此 Class 对象不表示枚举类型,则返回枚举类的元素或 null。
 Field getField(String name)
          返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
 Field[] getFields()
          返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。
 Type[] getGenericInterfaces()
          返回表示某些接口的 Type,这些接口由此对象所表示的类或接口直接实现。
 Type getGenericSuperclass()
          返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type
 Class<?>[] getInterfaces()
          确定此对象所表示的类或接口实现的接口。
 Method getMethod(String name, Class<?>... parameterTypes)
          返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。
 Method[] getMethods()
          返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。
 int getModifiers()
          返回此类或接口以整数编码的 Java 语言修饰符。
 String getName()
          以 String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。
 Package getPackage()
          获取此类的包。
 ProtectionDomain getProtectionDomain()
          返回该类的 ProtectionDomain
 URL getResource(String name)
          查找带有给定名称的资源。
 InputStream getResourceAsStream(String name)
          查找具有给定名称的资源。
 Object[] getSigners()
          获取此类的标记。
 String getSimpleName()
          返回源代码中给出的底层类的简称。
 Class<? super T> getSuperclass()
          返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class
 TypeVariable<Class<T>>[] getTypeParameters()
          按声明顺序返回 TypeVariable 对象的一个数组,这些对象表示用此 GenericDeclaration 对象所表示的常规声明来声明的类型变量。
 boolean isAnnotation()
          如果此 Class 对象表示一个注释类型则返回 true。
 boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
          如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。
 boolean isAnonymousClass()
          当且仅当底层类是匿名类时返回 true
 boolean isArray()
          判定此 Class 对象是否表示一个数组类。
 boolean isAssignableFrom(Class<?> cls)
          判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口。
 boolean isEnum()
          当且仅当该类声明为源代码中的枚举时返回 true。
 boolean isInstance(Object obj)
          判定指定的 Object 是否与此 Class 所表示的对象赋值兼容。
 boolean isInterface()
          判定指定的 Class 对象是否表示一个接口类型。
 boolean isLocalClass()
          当且仅当底层类是本地类时返回 true
 boolean isMemberClass()
          当且仅当底层类是成员类时返回 true
 boolean isPrimitive()
          判定指定的 Class 对象是否表示一个基本类型。
 boolean isSynthetic()
          如果此类是复合类,则返回 true,否则 false
 T newInstance()
          创建此 Class 对象所表示的类的一个新实例。
 String toString()
          将对象转换为字符串。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

方法详细信息

toString

public String toString()
将对象转换为字符串。字符串的表示形式为字符串 "class" 或 "interface" 后面紧跟一个空格,然后是该类的完全限定名,它具有 getName 返回的那种格式。如果此 Class 对象表示一个基本类型,则此方法返回该基本类型的名称。如果该 Class 对象表示 void,则此方法返回 "void"。

覆盖:
Object 中的 toString
返回:
表示此 class 对象的字符串。

forName

public static Class<?> forName(String className)
                        throws ClassNotFoundException
返回与带有给定字符串名的类或接口相关联的 Class 对象。调用此方法等效于:
  Class.forName(className, true, currentLoader)
 
其中 currentLoader 表示当前类的定义类加载器。

例如,以下代码片段返回命名为 java.lang.Thread 的类的运行时 Class 描述符。

   Class t = Class.forName("java.lang.Thread")
 

调用 forName("X") 将导致命名为 X 的类被初始化。

参数:
className - 所需类的完全限定名。
返回:
具有指定名的类的 Class 对象。
抛出:
LinkageError - 如果链接失败
ExceptionInInitializerError - 如果此方法所激发的初始化失败
ClassNotFoundException - 如果无法定位该类

forName

public static Class<?> forName(String name,
                               boolean initialize,
                               ClassLoader loader)
                        throws ClassNotFoundException
使用给定的类加载器,返回与带有给定字符串名的类或接口相关联的 Class 对象。(以 getName 所返回的格式)给定一个类或接口的完全限定名,此方法会试图定位、加载和链接该类或接口。指定的类加载器用于加载该类或接口。如果参数 loader 为 null,则该类通过引导类加载器加载。只有 initialize 参数为 true 且以前未被初始化时,才初始化该类。

如果 name 表示一个基本类型或 void,则会尝试在未命名的包中定位用户定义的名为 name 的类。因此,该方法不能用于获得表示基本类型或 void 的任何 Class 对象。

如果 name 表示一个数组类,则会加载但不初始化该数组类的组件类型。

例如,在一个实例方法中,表达式:

  Class.forName("Foo")
 
等效于:
  Class.forName("Foo", true, this.getClass().getClassLoader())
 
注意,此方法会抛出与加载、链接或初始化相关的错误,Java Language Specification 的第 12.2、12.3 和 12.4 节对此进行了详细说明。 注意,此方法不检查调用者是否可访问其请求的类。

如果 loadernull,也存在安全管理器,并且调用者的类加载器不为 null,则此方法通过 RuntimePermission("getClassLoader") 权限调用安全管理器的 checkPermission 方法,以确保可以访问引导类加载器。

参数:
name - 所需类的完全限定名
initialize - 是否必须初始化类
loader - 用于加载类的类加载器
返回:
表示所需类的类对象
抛出:
LinkageError - 如果链接失败
ExceptionInInitializerError - 如果该方法激发的初始化失败
ClassNotFoundException - 如果指定的类加载器无法定位该类
从以下版本开始:
1.2
另请参见:
forName(String), ClassLoader

newInstance

public T newInstance()
              throws InstantiationException,
                     IllegalAccessException
创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的 new 表达式实例化该类。如果该类尚未初始化,则初始化这个类。

注意,此方法传播 null 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。 Constructor.newInstance 方法将该构造方法所抛出的任何异常包装在一个(已检查的)InvocationTargetException 中,从而避免了这一问题。

返回:
此对象所表示的类的一个新分配的实例。
抛出:
IllegalAccessException - 如果该类或其 null 构造方法是不可访问的。
InstantiationException - 如果此 Class 表示一个抽象类、接口、数组类、基本类型或 void; 或者该类没有 null 构造方法; 或者由于其他某种原因导致实例化失败。
ExceptionInInitializerError - 如果该方法引发的初始化失败。
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:

isInstance

public boolean isInstance(Object obj)
判定指定的 Object 是否与此 Class 所表示的对象赋值兼容。此方法是 Java 语言 instanceof 运算符的动态等效方法。如果指定的 Object 参数非空,且能够在不引发 ClassCastException 的情况下被强制转换成该 Class 对象所表示的引用类型,则该方法返回 true;否则返回 false

特别地,当该 Class 对象表示一个已声明的类时,若指定的 Object 参数是所表示类(或其任一子类)的一个实例,则此方法返回 true;否则返回 false。如果此 Class 对象表示一个数组类,且通过身份转换或扩展引用转换,指定的 Object 参数能转换为一个数组类的对象,则返回 true;否则返回 false。如果此 Class 对象表示一个接口,且指定 Object 参数的类或任一超类实现了此接口,则此方法返回 true;否则返回 false。如果此 Class 对象表示一个基本类型,则此方法返回 false

参数:
obj - 要检查的对象
返回:
如果 obj 是此类的实例,则返回 true
从以下版本开始:
JDK1.1

isAssignableFrom

public boolean isAssignableFrom(Class<?> cls)
判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口。如果是则返回 true;否则返回 false。如果该 Class 表示一个基本类型,且指定的 Class 参数正是该 Class 对象,则该方法返回 true;否则返回 false

特别地,通过身份转换或扩展引用转换,此方法能测试指定 Class 参数所表示的类型能否转换为此 Class 对象所表示的类型。有关详细信息,请参阅 Java Language Specification 的第 5.1.1 和 5.1.4 节。

参数:
cls - 要检查的 Class 对象
返回:
表明 cls 类型的对象能否赋予此类对象的 boolean
抛出:
NullPointerException - 如果指定的 Class 参数为 null。
从以下版本开始:
JDK1.1

isInterface

public boolean isInterface()
判定指定的 Class 对象是否表示一个接口类型。

返回:
如果此对象表示一个接口,则返回 true;否则返回 false

isArray

public boolean isArray()
判定此 Class 对象是否表示一个数组类。

返回:
如果此对象表示一个数组类,则返回 true;否则返回 false
从以下版本开始:
JDK1.1

isPrimitive

public boolean isPrimitive()
判定指定的 Class 对象是否表示一个基本类型。

有九种预定义的 Class 对象,表示八个基本类型和 void。这些类对象由 Java 虚拟机创建,与其表示的基本类型同名,即 booleanbytecharshortintlongfloatdouble

这些对象仅能通过下列声明为 public static final 的变量访问,也是使此方法返回 true 的仅有的几个 Class 对象。

返回:
当且仅当该类表示一个基本类型时,才返回 true
从以下版本开始:
JDK1.1
另请参见:
Boolean.TYPE, Character.TYPE, Byte.TYPE, Short.TYPE, Integer.TYPE, Long.TYPE, Float.TYPE, Double.TYPE, Void.TYPE

isAnnotation

public boolean isAnnotation()
如果此 Class 对象表示一个注释类型则返回 true。注意,如果此方法返回 true,则 isInterface() 也返回 true,因为所有的注释类型同时也是接口。

返回:
如果此类对象表示一个注释类型,则返回 true;否则返回 false
从以下版本开始:
1.5

isSynthetic

public boolean isSynthetic()
如果此类是复合类,则返回 true,否则 false

返回:
当且仅当该类为复合类时才返回 true,Java 语言规范对此作了详细说明。
从以下版本开始:
1.5

getName

public String getName()
String 的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。

如果此类对象表示的是非数组类型的引用类型,则返回该类的二进制名称,Java Language Specification, Second Edition 对此作了详细说明。

如果此类对象表示一个基本类型或 void,则返回的名字是一个与该基本类型或 void 所对应的 Java 语言关键字相同的 String

如果此类对象表示一个数组类,则名字的内部形式为:表示该数组嵌套深度的一个或多个 '[' 字符加元素类型名。元素类型名的编码如下:

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"
 

返回:
此对象所表示的类或接口名。

getClassLoader

public ClassLoader getClassLoader()
返回该类的类加载器。有些实现可能使用 null 来表示引导类加载器。如果该类由引导类加载器加载,则此方法在这类实现中将返回 null。

如果存在安全管理器,并且调用者的类加载器不是 null,也不同于或是请求其类加载器的类的类加载器的祖先,则此方法通过 RuntimePermission("getClassLoader") 权限调用此安全管理器的 checkPermission 方法,以确保可以访问该类的类加载器。

如果此对象表示一个基本类型或 void,则返回 null。

返回:
加载此对象所表示的类或接口的类加载器。
抛出:
SecurityException - 如果存在安全管理器,并且 checkPermission 方法拒绝对该类类加载器的访问。
另请参见:
ClassLoader, SecurityManager.checkPermission(java.security.Permission), RuntimePermission

getTypeParameters

public TypeVariable<Class<T>>[] getTypeParameters()
按声明顺序返回 TypeVariable 对象的一个数组,这些对象表示用此 GenericDeclaration 对象所表示的常规声明来声明的类型变量。如果底层常规声明不声明类型变量,则返回长度为 0 的数组。

指定者:
接口 GenericDeclaration 中的 getTypeParameters
返回:
表示该常规声明所声明的类型变量的 TypeVariable 对象的一个数组
抛出:
GenericSignatureFormatError - 如果常规声明的常规签名不符合 Java Virtual Machine Specification, 3rd edition 规定的格式
从以下版本开始:
1.5

getSuperclass

public Class<? super T> getSuperclass()
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。如果此 Class 表示 Object 类、一个接口、一个基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示该 Object 类的 Class 对象。

返回:
此对象所表示的类的超类。

getGenericSuperclass

public Type getGenericSuperclass()
返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的直接超类的 Type

如果超类是参数化类型,则返回的 Type 对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示超类的参数化类型,则创建这个类型。有关参数化类型创建过程的语义,请参阅 ParameterizedType 声明。如果此 Class 表示 Object 类、接口、基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示 Object 类的 Class 对象。

返回:
此对象所表示的类的超类
抛出:
GenericSignatureFormatError - 如果常规类签名不符合 Java Virtual Machine Specification, 3rd edition 规定的格式
TypeNotPresentException - 如果常规超类引用不存在的类型声明
MalformedParameterizedTypeException - 如果常规超类引用的参数化类型由于某种原因无法实例化
从以下版本开始:
1.5

getPackage

public Package getPackage()
获取此类的包。此类的类加载器用于查找该包。如果该类是通过引导类加载器加载的,则搜索从 CLASSPATH 加载的包的集合,以查找该类的包。如果所有包对象都不是用该类的类加载器加载的,则返回 null。

只有该类的附属清单中定义了信息,并且类加载器使用该清单中的属性创建了包实例时,包才具有版本和规范属性。

返回:
该类的包,如果存档或基本代码中没有可用的包信息,则返回 null。

getInterfaces

public Class<?>[] getInterfaces()
确定此对象所表示的类或接口实现的接口。

如果此对象表示一个类,则返回值是一个数组,它包含了表示该类所实现的所有接口的对象。数组中接口对象顺序与此对象所表示的类的声明的 implements 子句中接口名顺序一致。例如,给定声明:

 class Shimmer implements FloorWax, DessertTopping { ... }
s 的值为 Shimmer 的一个实例;表达式:
 s.getClass().getInterfaces()[0]
 
的值为表示 FloorWax 接口的 Class 对象;
 s.getClass().getInterfaces()[1]
 
的值为表示 DessertTopping 接口的 Class 对象。

如果此对象表示一个接口,则该数组包含表示该接口扩展的所有接口的对象。数组中接口对象顺序与此对象所表示的接口的声明的 extends 子句中接口名顺序一致。

如果此对象表示一个不实现任何接口的类或接口,则此方法返回一个长度为 0 的数组。

如果此对象表示一个基本类型或 void,则此方法返回一个长度为 0 的数组。

返回:
该类所实现的接口的一个数组。

getGenericInterfaces

public Type[] getGenericInterfaces()
返回表示某些接口的 Type,这些接口由此对象所表示的类或接口直接实现。

如果超接口是参数化类型,则为它返回的 Type 对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示每个超接口的参数化类型,则创建这个类型。有关参数化类型创建过程的语义,请参阅 ParameterizedType 声明。

如果此对象表示一个类,则返回一个包含这样一些对象的数组,这些对象表示该类实现的所有接口。数组中接口对象顺序与此对象所表示的类的声明的 implements 子句中接口名顺序一致。对于数组类,接口 CloneableSerializable 以该顺序返回。

如果此对象表示一个接口,则该数组包含表示该接口直接扩展的所有接口的对象。数组中接口对象顺序与此对象所表示的接口的声明的 extends 子句中接口名顺序一致。

如果此对象表示一个不实现任何接口的类或接口,则此方法返回一个长度为 0 的数组。

如果此对象表示一个基本类型或 void,则此方法返回一个长度为 0 的数组。

返回:
此类所实现的接口的一个数组
抛出:
GenericSignatureFormatError - 如果常规类签名不符合 Java Virtual Machine Specification, 3rd edition 规定的格式
TypeNotPresentException - 如果任意常规超接口引用不存在的类型声明
MalformedParameterizedTypeException - 如果任意常规超接口引用的参数化类型由于某种原因无法实例化
从以下版本开始:
1.5

getComponentType

public Class<?> getComponentType()
返回表示数组组件类型的 Class。如果此类不表示数组类,则此方法返回 null。

返回:
如果此类是数组,则返回表示此类组件类型的 Class
从以下版本开始:
JDK1.1
另请参见:
Array

getModifiers

public int getModifiers()
返回此类或接口以整数编码的 Java 语言修饰符。修饰符由 Java 虚拟机的 publicprotectedprivatefinalstaticabstractinterface 对应的常量组成;它们应当使用 Modifier 类的方法来解码。

如果底层类是数组类,则其 publicprivateprotected 修饰符与其组件类型的修饰符相同。如果此 Class 表示一个基本类型或 void,则其 public 修饰符始终为 trueprotectedprivate 修饰符始终为 false。如果此对象表示一个数组类、一个基本类型或 void,则其 final 修饰符始终为 true,其接口修饰符始终为 false。该规范没有给定其他修饰符的值。

Java Virtual Machine Specification 中的表 4.1 对修饰符编码进行了详细说明。

返回:
表示该类修饰符的 int
从以下版本开始:
JDK1.1
另请参见:
Modifier

getSigners

public Object[] getSigners()
获取此类的标记。

返回:
此类的标记,若无标记则返回 null。特别地,如果此对象表示一个基本类型或 void,则此方法返回 null。
从以下版本开始:
JDK1.1

getEnclosingMethod

public Method getEnclosingMethod()
如果此 Class 对象表示某一方法中的一个本地或匿名类,则返回 Method 对象,它表示底层类的立即封闭方法。否则返回 null。 特别地,如果底层类是由一个类型声明、实例初始值设定项或静态初始值设定项立即封闭的本地或匿名类,则此方法返回 null

返回:
如果该类是本地或匿名类,则返回底层类的立即封闭方法;否则返回 null
从以下版本开始:
1.5

getEnclosingConstructor

public Constructor<?> getEnclosingConstructor()
如果该 Class 对象表示构造方法中的一个本地或匿名类,则返回 Constructor 对象,它表示底层类的立即封闭构造方法。否则返回 null。特别地,如果底层类是由一个类型声明、实例初始值设定项或静态初始值设定项立即封闭的本地或匿名类,则此方法返回 null

返回:
如果该类是本地或匿名类,则返回底层类的立即封闭构造方法;否则返回 null
从以下版本开始:
1.5

getDeclaringClass

public Class<?> getDeclaringClass()
如果此 Class 对象所表示的类或接口是另一个类的成员,则返回的 Class 对象表示该对象的声明类。如果该类或接口不是其他类的成员,则此方法返回 null。如果此 Class 对象表示一个数组类、基本类型或 void,则此方法返回 null。

返回:
该类的声明类
从以下版本开始:
JDK1.1

getEnclosingClass

public Class<?> getEnclosingClass()
返回底层类的立即封闭类。如果底层类是顶层类,则此方法返回 null

返回:
底层类的立即封闭类
从以下版本开始:
1.5

getSimpleName

public String getSimpleName()
返回源代码中给出的底层类的简称。如果底层类是匿名的则返回一个空字符串。

数组的简称即附带 "[]" 的组件类型的简称。特别地,组件类型为匿名的数组的简称是 "[]"。

返回:
底层类的简称
从以下版本开始:
1.5

getCanonicalName

public String getCanonicalName()
返回 Java Language Specification 中所定义的底层类的规范化名称。如果底层类没有规范化名称(即如果底层类是一个组件类型没有规范化名称的本地类、匿名类或数组),则返回 null。

返回:
底层类的规范化名称(如果存在的话);否则返回 null
从以下版本开始:
1.5

isAnonymousClass

public boolean isAnonymousClass()
当且仅当底层类是匿名类时返回 true

返回:
当且仅当此类是匿名类时,才返回 true
从以下版本开始:
1.5

isLocalClass

public boolean isLocalClass()
当且仅当底层类是本地类时返回 true

返回:
当且仅当该类是本地类时,才返回 true
从以下版本开始:
1.5

isMemberClass

public boolean isMemberClass()
当且仅当底层类是成员类时返回 true

返回:
当且仅当该类是成员类时,才返回 true
从以下版本开始:
1.5

getClasses

public Class<?>[] getClasses()
返回一个包含某些 Class 对象的数组,这些对象表示属于此 Class 对象所表示的类的成员的所有公共类和接口。包括从超类继承的公共类和接口成员以及该类声明的公共类和接口成员。如果此 Class 对象没有公共成员类或接口,则此方法返回一个长度为 0 的数组。如果此 Class 对象表示一个基本类型、一个数组类或 void,则此方法也返回一个长度为 0 的数组。

返回:
表示该类公共成员的 Class 对象的数组
抛出:
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getFields

public Field[] getFields()
                  throws SecurityException
返回一个包含某些 Field 对象的数组,这些对象反映此 Class 对象所表示的类或接口的所有可访问公共字段。返回数组中的元素没有排序,也没有任何特定的顺序。如果类或接口没有可访问的公共字段,或者表示一个数组类、一个基本类型或 void,则此方法返回长度为 0 的数组。

特别地,如果该 Class 对象表示一个类,则此方法返回该类及其所有超类的公共字段。如果该 Class 对象表示一个接口,则此方法返回该接口及其所有超接口的公共字段。

该方法不反映数组类的隐式长度字段。用户代码应使用 Array 类的方法来操作数组。

请参阅 Java Language Specification 的第 8.2 和 8.3 节。

返回:
表示公共字段的 Field 对象的数组
抛出:
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getMethods

public Method[] getMethods()
                    throws SecurityException
返回一个包含某些 Method 对象的数组,这些对象反映此 Class 对象所表示的类或接口(包括那些由该类或接口声明的以及从超类和超接口继承的那些的类或接口)的公共 member 方法。数组类返回从 Object 类继承的所有(公共)member 方法。返回数组中的元素没有排序,也没有任何特定的顺序。如果此 Class 对象表示没有公共成员方法的类或接口,或者表示一个基本类型或 void,则此方法返回长度为 0 的数组。

类初始化方法 <clinit> 不包含在返回的数组中。如果类声明了带有相同参数类型的多个公共成员方法,则它们都会包含在返回的数组中。

请参阅 Java Language Specification 的第 8.2 和 8.4 节。

返回:
表示此类中公共方法的 Method 对象的数组
抛出:
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getConstructors

public Constructor<?>[] getConstructors()
                                 throws SecurityException
返回一个包含某些 Constructor 对象的数组,这些对象反映此 Class 对象所表示的类的所有公共构造方法。如果该类没有公共构造方法,或者该类是一个数组类,或者该类反映一个基本类型或 void,则返回一个长度为 0 的数组。 注意,此方法返回 Constructor<T> 对象的数组(即取自此类构造方法的数组)时,此方法的返回类型是 Constructor<?>[]不是 预期的 Constructor<T>[]。此少量信息的返回类型是必需的,因为从此方法返回之后,该数组可能被修改以保存不同类的 Constructor 对象,而这将违反 Constructor<T>[] 的类型保证。

返回:
表示此类公共构造方法的 Constructor 对象数组
抛出:
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getField

public Field getField(String name)
               throws NoSuchFieldException,
                      SecurityException
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。name 参数是一个 String,用于指定所需字段的简称。

要反映的字段由下面的算法确定。设 C 为此对象所表示的类:

  1. 如果 C 声明一个带有指定名的公共字段,则它就是要反映的字段。
  2. 如果在第 1 步中没有找到任何字段,则该算法被递归地应用于 C 的每一个直接超接口。直接超接口按其声明顺序进行搜索。
  3. 如果在第 1、2 两步没有找到任何字段,且 C 有一个超类 S,则在 S 上递归调用该算法。如果 C 没有超类,则抛出 NoSuchFieldException

请参阅 Java Language Specification 的第 8.2 和 8.3 节。

参数:
name - 字段名
返回:
name 指定的该类的 Field 对象
抛出:
NoSuchFieldException - 如果没有找到带有指定名的字段。
NullPointerException - 如果 namenull
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getMethod

public Method getMethod(String name,
                        Class<?>... parameterTypes)
                 throws NoSuchMethodException,
                        SecurityException
返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法。name 参数是一个 String,用于指定所需方法的简称。parameterTypes 参数是按声明顺序标识该方法形参类型的 Class 对象的一个数组。如果 parameterTypesnull,则按空数组处理。

如果 name 是 "<init>;" 或 "<clinit>",则将引发 NoSuchMethodException。否则,要反映的方法由下面的算法确定(设 C 为此对象所表示的类):

  1. 在 C 中搜索任一匹配的方法。如果找不到匹配的方法,则将在 C 的超类上递归调用第 1 步算法。
  2. 如果在第 1 步中没有找到任何方法,则在 C 的超接口中搜索匹配的方法。如果找到了这样的方法,则反映该方法。
在 C 类中查找匹配的方法:如果 C 正好声明了一个具有指定名称的公共方法并且恰恰有相同的形参类型,则它就是反映的方法。如果在 C 中找到了多个这样的方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则反映该方法;否则将从中任选一个方法。

注意,类中可以有多个匹配方法,因为尽管 Java 语言禁止类声明带有相同签名但不同返回类型的多个方法,但 Java 虚拟机并不禁止。这增加了虚拟机的灵活性,可以用来实现各种语言特性。例如,可以使用桥方法 (brige method)实现协变返回;桥方法以及将被重写的方法将具有相同的签名,不同的返回类型。

请参阅Java 语言规范 第 8.2 和 8.4 节。

参数:
name - 方法名
parameterTypes - 参数列表
返回:
与指定的 nameparameterTypes 匹配的 Method 对象
抛出:
NoSuchMethodException - 如果找不到匹配的方法,或者方法名为 "<init>" 或 "<clinit>"
NullPointerException - 如果 namenull
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getConstructor

public Constructor<T> getConstructor(Class<?>... parameterTypes)
                              throws NoSuchMethodException,
                                     SecurityException
返回一个 Constructor 对象,它反映此 Class 对象所表示的类的指定公共构造方法。parameterTypes 参数是 Class 对象的一个数组,这些 Class 对象按声明顺序标识构造方法的形参类型。 如果此 Class 对象表示非静态上下文中声明的内部类,则形参类型作为第一个参数包括显示封闭的实例。

要反映的构造方法是此 Class 对象所表示的类的公共构造方法,其形参类型与 parameterTypes 所指定的参数类型相匹配。

参数:
parameterTypes - 参数数组
返回:
与指定的 parameterTypes 相匹配的公共构造方法的 Constructor 对象
抛出:
NoSuchMethodException - 如果找不到匹配的方法。
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getDeclaredClasses

public Class<?>[] getDeclaredClasses()
                              throws SecurityException
返回 Class 对象的一个数组,这些对象反映声明为此 Class 对象所表示的类的成员的所有类和接口。包括该类所声明的公共、保护、默认(包)访问及私有类和接口,但不包括继承的类和接口。如果该类不将任何类或接口声明为成员,或者此 Class 对象表示基本类型、数组类或 void,则此方法返回一个长度为 0 的数组。

返回:
Class 对象的数组,表示该类的所有 declared 成员
抛出:
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getDeclaredFields

public Field[] getDeclaredFields()
                          throws SecurityException
返回 Field 对象的一个数组,这些对象反映此 Class 对象所表示的类或接口所声明的所有字段。包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。 返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何字段,或者此 Class 对象表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。

请参阅 Java Language Specification 的第 8.2 和 8.3 节。

返回:
表示此类所有已声明字段的 Field 对象的数组
抛出:
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getDeclaredMethods

public Method[] getDeclaredMethods()
                            throws SecurityException
返回 Method 对象的一个数组,这些对象反映此 Class 对象表示的类或接口声明的所有方法,包括公共、保护、默认(包)访问和私有方法,但不包括继承的方法。 返回数组中的元素没有排序,也没有任何特定的顺序。如果该类或接口不声明任何方法,或者此 Class 对象 表示一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。类初始化方法 <clinit> 不包含在返回数组中。如果该类声明带有相同参数类型的多个公共成员方法,则它们都包含在返回的数组中。

请参阅 Java Language Specification 第 8.2 节。

返回:
表示此类所有声明方法的 Method 对象的数组
抛出:
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getDeclaredConstructors

public Constructor<?>[] getDeclaredConstructors()
                                         throws SecurityException
返回 Constructor 对象的一个数组,这些对象反映此 Class 对象表示的类声明的所有构造方法。它们是公共、保护、默认(包)访问和私有构造方法。返回数组中的元素没有排序,也没有任何特定的顺序。如果该类存在一个默认构造方法,则它包含在返回的数组中。 如果此 Class 对象表示一个接口、一个基本类型、一个数组类或 void,则此方法返回一个长度为 0 的数组。

请参阅 Java Language Specification 第 8.2 节。

返回:
表示此类所有已声明的构造方法的 Constructor 对象的数组
抛出:
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getDeclaredField

public Field getDeclaredField(String name)
                       throws NoSuchFieldException,
                              SecurityException
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。name 参数是一个 String,它指定所需字段的简称。注意,此方法不反映数组类的 length 字段。

参数:
name - 字段名
返回:
此类中指定字段的 Field 对象
抛出:
NoSuchFieldException - 如果找不到带有指定名称的字段。
NullPointerException - 如果 namenull
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getDeclaredMethod

public Method getDeclaredMethod(String name,
                                Class<?>... parameterTypes)
                         throws NoSuchMethodException,
                                SecurityException
返回一个 Method 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明方法。name 参数是一个 String,它指定所需方法的简称,parameterTypes 参数是 Class 对象的一个数组,它按声明顺序标识该方法的形参类型。如果在某个类中声明了带有相同参数类型的多个方法,并且其中有一个方法的返回类型比其他方法的返回类型都特殊,则返回该方法;否则将从中任选一个方法。如果名称是 "<init>” 或 “<clinit>",则引发一个 NoSuchMethodException

参数:
name - 方法名
parameterTypes - 参数数组
返回:
该类与指定名和参数相匹配的方法的 Method 对象
抛出:
NoSuchMethodException - 如果找不到匹配的方法。
NullPointerException - 如果 namenull
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getDeclaredConstructor

public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
                                      throws NoSuchMethodException,
                                             SecurityException
返回一个 Constructor 对象,该对象反映此 Class 对象所表示的类或接口的指定构造方法。parameterTypes 参数是 Class 对象的一个数组,它按声明顺序标识构造方法的形参类型。 如果此 Class 对象表示非静态上下文中声明的内部类,则形参类型作为第一个参数包括显示封闭的实例。

参数:
parameterTypes - 参数数组
返回:
带有指定参数列表的构造方法的 Constructor 对象
抛出:
NoSuchMethodException - 如果找不到匹配的方法。
SecurityException - 如果存在安全管理器 s,并满足下列任一条件:
从以下版本开始:
JDK1.1

getResourceAsStream

public InputStream getResourceAsStream(String name)
查找具有给定名称的资源。查找与给定类相关的资源的规则是通过定义类的 class loader 实现的。此方法委托此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给 ClassLoader.getSystemResourceAsStream(java.lang.String)

在委托前,使用下面的算法从给定的资源名构造一个绝对资源名:

参数:
name - 所需资源的名称
返回:
一个 InputStream 对象;如果找不到带有该名称的资源,则返回 null
抛出:
NullPointerException - 如果 namenull
从以下版本开始:
JDK1.1

getResource

public URL getResource(String name)
查找带有给定名称的资源。查找与给定类相关的资源的规则是通过定义类的 class loader 实现的。此方法委托给此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给 ClassLoader.getSystemResource(java.lang.String)

在委托前,使用下面的算法从给定的资源名构造一个绝对资源名:

参数:
name - 所需资源的名称
返回:
一个 URL 对象;如果找不到带有该名称的资源,则返回 null
从以下版本开始:
JDK1.1

getProtectionDomain

public ProtectionDomain getProtectionDomain()
返回该类的 ProtectionDomain。如果安装了安全管理器,则此方法首先通过 RuntimePermission("getProtectionDomain") 权限调用安全管理器的 checkPermission 方法,以确保可以获取 ProtectionDomain

返回:
该类的 ProtectionDomain
抛出:
SecurityException - 若安全管理器存在,并且其 checkPermission 方法不允许获取 ProtectionDomain。
从以下版本开始:
1.2
另请参见:
ProtectionDomain, SecurityManager.checkPermission(java.security.Permission), RuntimePermission

desiredAssertionStatus

public boolean desiredAssertionStatus()
如果要在调用此方法时将要初始化该类,则返回将分配给该类的断言状态。 如果已经设置了该类的断言状态,则返回其最新设置;如果有包默认断言状态属于此类,则返回最特殊的相关包默认断言状态的最新设置;如果该类不是系统类(即它有类加载器),则返回其类加载器的默认断言状态;否则返回系统类默认断言状态。

很少有程序员需要此方法;它是为 JRE 自身提供的。(它使类能够在初始化时确定是否启用断言。)注意,不保证此方法在(或将要)初始化指定类时返回与(或将与)该指定类相关的实际断言状态。

返回:
所需的指定类断言状态。
从以下版本开始:
1.4
另请参见:
ClassLoader.setClassAssertionStatus(java.lang.String, boolean), ClassLoader.setPackageAssertionStatus(java.lang.String, boolean), ClassLoader.setDefaultAssertionStatus(boolean)

isEnum

public boolean isEnum()
当且仅当该类声明为源代码中的枚举时返回 true。

返回:
当且仅当该类声明为源代码中的枚举时返回 true
从以下版本开始:
1.5

getEnumConstants

public T[] getEnumConstants()
如果此 Class 对象不表示枚举类型,则返回枚举类的元素或 null。

返回:
以声明顺序返回一个数组,该数组包含构成此 Class 对象所表示的枚举类的值,或者在此 Class 对象不表示枚举类型时返回 null
从以下版本开始:
1.5

cast

public T cast(Object obj)
将一个对象强制转换成此 Class 对象所表示的类或接口。

参数:
obj - 要强制转换的对象
返回:
强制转换返回该对象,若 obj 为 null 则返回 null
抛出:
ClassCastException - 如果该对象不是 null 也不能分配给类型 T。
从以下版本开始:
1.5

asSubclass

public <U> Class<? extends U> asSubclass(Class<U> clazz)
强制转换该 Class 对象,以表示指定的 class 对象所表示的类的一个子类。检查强制转换的有效性,如果无效则抛出 ClassCastException。如果此方法成功了,它将始终返回对此 class 对象的一个引用。

此方法的使用场合为:客户端需要“收缩转换” Class 对象的类型,以便将其传递给某个 API,且该 API 对它愿意接受的 Class 对象进行限制。强制转换会产生一个编译时警告,因为强制转换的正确性无法在运行时检查(因为常规类型是通过擦除实现的)。

返回:
Class 对象,它被强制转换以表示指定类对象的子类。
抛出:
ClassCastException - 如果该 Class 对象不表示指定类的子类(这里“子类”包括该类本身)。
从以下版本开始:
1.5

getAnnotation

public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
从接口 AnnotatedElement 复制的描述
如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。

指定者:
接口 AnnotatedElement 中的 getAnnotation
参数:
annotationClass - 对应于注释类型的 Class 对象
返回:
如果该元素的指定注释类型的注释存在于此对象上,则返回这些注释,否则返回 null
抛出:
NullPointerException - 如果给定的注释类为 null
从以下版本开始:
1.5

isAnnotationPresent

public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
从接口 AnnotatedElement 复制的描述
如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。此方法主要是为了便于访问标记注释而设计的。

指定者:
接口 AnnotatedElement 中的 isAnnotationPresent
参数:
annotationClass - 对应于注释类型的 Class 对象
返回:
如果指定注释类型的注释存在于此对象上,则返回 true,否则返回 false
抛出:
NullPointerException - 如果给定的注释类为 null
从以下版本开始:
1.5

getAnnotations

public Annotation[] getAnnotations()
从接口 AnnotatedElement 复制的描述
返回此元素上存在的所有注释。(如果此元素没有注释,则返回长度为零的数组。)该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。

指定者:
接口 AnnotatedElement 中的 getAnnotations
返回:
此元素上存在的所有注释
从以下版本开始:
1.5

getDeclaredAnnotations

public Annotation[] getDeclaredAnnotations()
从接口 AnnotatedElement 复制的描述
返回直接存在于此元素上的所有注释。与此接口中的其他方法不同,该方法将忽略继承的注释。(如果没有注释直接存在于此元素上,则返回长度为零的一个数组。)该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。

指定者:
接口 AnnotatedElement 中的 getDeclaredAnnotations
返回:
直接存在于此元素上的所有注释
从以下版本开始:
1.5

JavaTM 2 Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策