java.lang

接口
异常
错误
注释
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
<