| |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang
类 Class<T>
java.lang.Object java.lang.Class<T>
- 所有已实现的接口:
- Serializable, AnnotatedElement, GenericDeclaration, Type
public final class Class<T>
- extends Object
- implements Serializable, GenericDeclaration, Type, AnnotatedElement
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());
- 从以下版本开始:
- JDK1.0
- 另请参见:
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 |
方法详细信息 |
---|
toString
public String toString()
- 将对象转换为字符串。字符串的表示形式为字符串 "class" 或 "interface" 后面紧跟一个空格,然后是该类的完全限定名,它具有
getName
返回的那种格式。如果此Class
对象表示一个基本类型,则此方法返回该基本类型的名称。如果该Class
对象表示 void,则此方法返回 "void"。 - 返回:
- 表示此 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")
注意,此方法会抛出与加载、链接或初始化相关的错误,《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
- 如果类无法用指定的类加载器定位- 从以下版本开始:
- 1.2
- 另请参见:
forName(String)
,ClassLoader
newInstance
public T newInstance() throws InstantiationException, IllegalAccessException
- 创建此 Class 对象所表示的类的一个新实例。如同用一个带有一个空参数列表的
new
表达式实例化该类。如果该类尚未初始化,则初始化之。注意,此方法传播 nullary 构造方法所抛出的任何异常,包括已检查的异常。使用此方法可以有效地绕过编译时的异常检查,而在其他情况下编译器都会执行该检查。
Constructor.newInstance
方法将该构造方法所抛出的任何异常包装在一个(已检查的)InvocationTargetException
中,从而避免了这一问题。 - 返回:
- 此对象所表示的类的一个新分配的实例。
- 抛出:
IllegalAccessException
- 如果此类或其 nullary 构造方法是不可访问的。InstantiationException
- 如果此Class
表示一个抽象类、接口、数组类、基本类型或 void; 或者该类没有 nullary 构造方法; 或者由于某种其他原因导致实例化过程失败。ExceptionInInitializerError
- 如果该方法引发的初始化失败。SecurityException
- 如果存在安全管理器 s,并满足下列任一条件:- 调用
s.checkMemberAccess(this, Member.PUBLIC)
拒绝创建该类的新实例 - 调用方的类加载器不同于也不是该类的类加载器的一个祖先,并且对
s.checkPackageAccess()
的调用拒绝访问该类的包
- 调用
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
。