一、Class类的基础介绍
- Class类的实例表示正在运行的 Java 应用程序中的类和接口.
- Enum枚举是一种类,annotation 注解是一种接口.
- 每个数组还属于一个类,该对象由具有相同元素类型和维数的所有数组共享。
- 原始 Java 类型(布尔型、字节型、字符型、短整型、整型、长整型、浮点型和双精度型)和关键字 void 也表示为类对象。
- 类没有公共构造函数。相反,类对象由 Java 虚拟机在装入类时自动构造,并在类装入器中调用 defineClass 方法.
二、Class类的公共方法介绍
方法 | 方法说明 | 方法参数说明 | JDK版本 |
---|---|---|---|
forName (String className) | 通过全路径类名称创建类对象 | 全路径类名称 | 1.0 |
forName(String name, boolean initialize, ClassLoader loader) | 通过全路径类名称创建类对象 | name(全路径类名称),initialize(是否初始化),loader(指定类加载器) | 1.2 |
newInstance() | 创建无参构造函数实例 | 1.0 | |
isInstance(Object obj) | 确定指定的对象是否与此类所表示的对象赋值兼容 | 待检查对象 | 1.1 |
isInterface() | 确定指定的 Class 对象是否表示接口类型 | 1.0 | |
isArray() | 确定指定的 Class 对象是否表示数组类型 | 1.0 | |
isPrimitive() | 确定指定的 Class 对象是否表示基元类型(基本数据类型加Void) | 1.0 | |
isAnnotation() | 确定制定接口class对象是否表示注解类型 | 1.5 | |
isSynthetic() | 确定制定接口class对象是否表示合成类类型 | 1.5 | |
getName() | 获取类名称 | 1.0 | |
getClassLoader() | 获取类加载器 | 1.0 | |
getTypeParameters() | 返回 TypeVariable 对象的数组,这些对象按声明顺序表示由此泛型声明对象所表示的泛型声明所声明的类型变量。如果基础泛型声明未声明任何类型变量,则返回长度为 0 的数组 | 1.5 | |
getSuperclass() | 获取此类对象的超类 | 1.0 | |
getGenericSuperclass() | 获取此类实体的直接超类 | 1.5 | |
getPackage() | 获取类的包路径 | 1.0 | |
getInterfaces() | 获取此类对象所实现的所有接口类 | 1.0 | |
getGenericInterfaces() | 返回表示由此对象表示的类或接口直接实现的接口的类型 | 1.5 | |
getComponentType | 返回表示数组的组件类型的类。如果此类不表示数组类,则此方法返回 null | 1.1 | |
getModifiers() | 返回此类或接口的 Java 语言修饰符,以整数编码。修饰符由Java虚拟机的常量组成,用于公共,受保护,私有,最终,静态,抽象和接口;它们应该使用类修饰符的方法进行解码 | 1.1 | |
getDeclaringClass() | 获取此类对象被那些类对象声明为成员的集合,如果没有被声明过返回null | 1.1 | |
getSimpleName() | 返回源代码中给定的基础类的简单名称。如果基础类是匿名的,则返回空字符串 | 1.5 | |
isAnonymousClass() | 确定制定接口class对象是否表示匿名类类型 | 1.5 | |
isLocalClass() | 确定制定接口class对象是否表示本地类类型 | ||
isMemberClass() | 确定制定接口class对象是否表示成员类类型 | 1.5 | |
getClasses() | 返回一个数组,该数组包含 Class 对象,这些对象表示作为 Class 对象所表示的类的成员的所有公共类和接口。这包括从超类继承的公共类和接口成员以及该类声明的公共类和接口成员。如果 Class 对象没有公共成员类或接口,则此方法返回长度为 0 的数组。如果 Class 对象表示基元类型、数组类或 void,则此方法还返回长度为 0 的数组 | 1.1 | |
getFields() | 返回一个数组,其中包含 Field 对象,该对象反映由 Class 对象表示的类或接口的所有可访问的公共字段 | 1.1 | |
getMethods() | 返回一个数组,该数组包含 Method 对象,这些对象反映由 Class 对象表示的类或接口的所有公共方法,包括由类或接口声明的那些方法以及从超类和超接口继承的方法 | 1.1 | |
getConstructors() | 表示此类的公共构造函数的构造函数对象的数组 | 1.1 | |
getField(String name) | 通过属性字符串名称获取公共属性Field | 属性字符串名称 | 1.1 |
getMethod(String name, Class<?>… parameterTypes) | 通过方法名称和指定参数类型集合获取对应公共方法Method | name(方法名称), parameterTypes(指定参数类型类集合) | 1.1 |
getConstructor(Class<?>… parameterTypes) | 通过指定参数类型集合获取对应有参构造函数 | parameterTypes(指定参数类型类集合) | 1.1 |
getDeclaredClasses() | 返回一个数组,该数组包含 Class 对象,这些对象表示作为 Class 对象所表示的类的成员的所有公共、私有、受保护、默认的类和接口。这包括从超类继承的公共类和接口成员以及该类声明的公共类和接口成员。如果 Class 对象没有公共成员类或接口,则此方法返回长度为 0 的数组。如果 Class 对象表示基元类型、数组类或 void,则此方法还返回长度为 0 的数组 | 1.1 | |
getFields() | 返回一个数组,其中包含 Field 对象,该对象反映由 Class 对象表示的类或接口的所有可访问的公共、私有、受保护、默认的字段 | 1.1 | |
getDeclaredMethods() | 返回一个数组,该数组包含 Method 对象,这些对象反映由 Class 对象表示的类或接口的所有公共、私有、受保护、默认的方法,包括由类或接口声明的那些方法以及从超类和超接口继承的方法 | 1.1 | |
getDeclaredConstructors() | 表示此类的公共、私有、受保护、默认的构造函数的构造函数对象的数组 | 1.1 | |
getDeclaredField(String name) | 通过属性字符串名称获取公共、私有、受保护、默认的属性Field | 属性字符串名称 | 1.1 |
getDeclaredMethod(String name, Class<?>… parameterTypes) | 通过方法名称和指定参数类型集合获取对应公共、私有、受保护、默认的方法Method | name(方法名称), parameterTypes(指定参数类型类集合) | 1.1 |
getDeclaredConstructor(Class<?>… parameterTypes) | 通过指定参数类型集合获取对应有公共、私有、受保护、默认的参构造函数 | parameterTypes(指定参数类型类集合) | 1.1 |
getResourceAsStream(String name) | 对指定的全路径名称进行加载为Inutstream | 全路径名称字符串 | 1.1 |
isEnum() | 确定指定的 Class 对象是否表示枚举类型 | 1.5 | |
getEnumConstants() | 返回此枚举类的元素集合 | 1.5 | |
cast(Object obj) | 将对象强制转换为由此类对象表示的类或接口 | 要转换的对象 | |
asSubclass(Class clazz) | 将类强制转换为由此类的子类 | 1.5 | |
getAnnotation(Class annotationClass) | 通过注解类获取公共注解类型 | annotationClass注解类 | 1.5 |
isAnnotationPresent(Class<? extends Annotation> annotationClass) | 确定当前类是否声明对应注解类 | annotationClass需要获取的注解类 | 1.5 |
getDeclaredAnnotations() | 获取类上声明所有的公共、私有、受保护、默认的注解集合 | 1.5 | |
getDeclaredAnnotation(Class annotationClass) | 通过注解类获取类上声明所有的公共、私有、受保护、默认的注解 | annotationClass需要获取的注解类 | 1.8 |
getAnnotations() | 获取类上声明所有的公共的注解集合 | 1.5 | |
getAnnotation(Class annotationClass) | 通过注解类获取类上声明所有的公共的注解 | annotationClass需要获取的注解类 | 1.5 |
所有的方法都已经广泛应用于各个框架,熟练使用并了解方法用途对于查看框架API有很好的理解作用,目前第一篇关于Class的文章就到这里(以上内容来源自JDK1.8Class源码解读).