java.lang.Object java.lang.Class<T>
T
- 由此
Class
对象建模的类的类型。例如,
String.class
的类型是
Class<String>
。如果将被建模的类未知,则使用
Class<?>
。
public final class Class<T>
Class
类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class
对象。基本的 Java 类型(boolean
、byte
、char
、short
、int
、long
、float
和 double
)和关键字 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());
ClassLoader.defineClass(byte[], int, int)
,
序列化表格
方法摘要 | ||
---|---|---|
|
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 对象。 |
|
|
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 |
方法详细信息 |
---|
public String toString()
getName
返回的那种格式。如果此
Class
对象表示一个基本类型,则此方法返回该基本类型的名称。如果该
Class
对象表示 void,则此方法返回 "void"。
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
- 如果无法定位该类
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")
注意,此方法会抛出与加载、链接或初始化相关的错误, Java Language Specification 的第 12.2、12.3 和 12.4 节对此进行了详细说明。 注意,此方法不检查调用者是否可访问其请求的类。Class.forName("Foo", true, this.getClass().getClassLoader())
如果 loader
为 null
,也存在安全管理器,并且调用者的类加载器不为 null,则此方法通过 RuntimePermission("getClassLoader")
权限调用安全管理器的 checkPermission
方法,以确保可以访问引导类加载器。
name
- 所需类的完全限定名
initialize
- 是否必须初始化类
loader
- 用于加载类的类加载器
LinkageError
- 如果链接失败
ExceptionInInitializerError
- 如果该方法激发的初始化失败
ClassNotFoundException
- 如果指定的类加载器无法定位该类
forName(String)
,
ClassLoader
public T newInstance() throws InstantiationException, IllegalAccessException
new
表达式实例化该类。如果该类尚未初始化,则初始化这个类。
注意,此方法传播 null 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。 Constructor.newInstance
方法将该构造方法所抛出的任何异常包装在一个(已检查的)InvocationTargetException
中,从而避免了这一问题。
IllegalAccessException
- 如果该类或其 null 构造方法是不可访问的。
InstantiationException
- 如果此
Class
表示一个抽象类、接口、数组类、基本类型或 void; 或者该类没有 null 构造方法; 或者由于其他某种原因导致实例化失败。
ExceptionInInitializerError
- 如果该方法引发的初始化失败。
SecurityException
- 如果存在安全管理器
s,并满足下列任一条件:
s.checkMemberAccess(this, Member.PUBLIC)
拒绝创建该类的新实例 s.checkPackageAccess()
的调用拒绝访问该类的包 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
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。
public boolean isInterface()
Class
对象是否表示一个接口类型。
true
;否则返回
false
。
public boolean isArray()
Class
对象是否表示一个数组类。
true
;否则返回
false
。
public boolean isPrimitive()
Class
对象是否表示一个基本类型。
有九种预定义的 Class
对象,表示八个基本类型和 void。这些类对象由 Java 虚拟机创建,与其表示的基本类型同名,即 boolean
、byte
、char
、short
、int
、long
、float
和 double
。
这些对象仅能通过下列声明为 public static final 的变量访问,也是使此方法返回 true
的仅有的几个 Class
对象。
Boolean.TYPE
,
Character.TYPE
,
Byte.TYPE
,
Short.TYPE
,
Integer.TYPE
,
Long.TYPE
,
Float.TYPE
,
Double.TYPE
,
Void.TYPE
public boolean isAnnotation()
isInterface()
也返回 true,因为所有的注释类型同时也是接口。
public boolean isSynthetic()
public String getName()
如果此类对象表示的是非数组类型的引用类型,则返回该类的二进制名称,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"
public ClassLoader getClassLoader()
如果存在安全管理器,并且调用者的类加载器不是 null,也不同于或是请求其类加载器的类的类加载器的祖先,则此方法通过 RuntimePermission("getClassLoader")
权限调用此安全管理器的 checkPermission
方法,以确保可以访问该类的类加载器。
如果此对象表示一个基本类型或 void,则返回 null。
SecurityException
- 如果存在安全管理器,并且
checkPermission
方法拒绝对该类类加载器的访问。
ClassLoader
,
SecurityManager.checkPermission(java.security.Permission)
,
RuntimePermission
public TypeVariable<Class<T>>[] getTypeParameters()
GenericDeclaration
中的
getTypeParameters
GenericSignatureFormatError
- 如果常规声明的常规签名不符合 Java Virtual Machine Specification, 3rd edition 规定的格式
public Class<? super T> getSuperclass()
Class
所表示的实体(类、接口、基本类型或 void)的超类的
Class
。如果此
Class
表示
Object
类、一个接口、一个基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示该
Object
类的
Class
对象。
public Type getGenericSuperclass()
如果超类是参数化类型,则返回的 Type 对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示超类的参数化类型,则创建这个类型。有关参数化类型创建过程的语义,请参阅 ParameterizedType
声明。如果此 Class 表示 Object 类、接口、基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示 Object 类的 Class 对象。
GenericSignatureFormatError
- 如果常规类签名不符合 Java Virtual Machine Specification, 3rd edition 规定的格式
TypeNotPresentException
- 如果常规超类引用不存在的类型声明
MalformedParameterizedTypeException
- 如果常规超类引用的参数化类型由于某种原因无法实例化