20230525 java.lang.Class
介绍
java.lang.Class
public final class Class<T> implements java.io.Serializable, GenericDeclaration, Type, AnnotatedElement, TypeDescriptor.OfField<Class<?>>, Constable
- 类Class的实例表示正在运行的 Java 应用程序中的类和接口
- 枚举类和记录类是类的种类
- 注解接口是一种接口
- 数组、原始类型 也表示为 Class 对象
ClassLoader.defineClass(byte[], int, int)
- 每个类的Class对象,在内存中只有一份,因为类只加载一次
- 类实例在堆上,类的字节码二进制数据在方法区上
API
AnnotatedElement
- isAnnotationPresent
- getAnnotation
- getAnnotations
- getAnnotationByType
- getDeclaredAnnotation
- getDeclaredAnnotations
- getDeclaredAnnotationsByType
java.lang.reflect.Type
- getTypeName
- 返回类型名称,对数组类型进行了优化,非数组调用
getName
- 返回类型名称,对数组类型进行了优化,非数组调用
java.lang.invoke.TypeDescriptor
- descriptorString
java.lang.invoke.TypeDescriptor.OfField
- arrayType
- 当前类型对应的数组类型
- componentType
- 数组的元素类型
- isArray
- 是否数组
- isPrimitive
- 是否原始类型,包括 void
Constable
- describeConstable
- 如果可以构造,则返回此实例的标称描述符,如果不能构造,则返回一个空的Optional
GenericDeclaration
- getTypeParameters
- 获取泛型参数,例如 HashMap 的泛型参数是 [K, V]
public
Name
- forName
- 通过类的全限定名获取 Class
- getName
- 返回类型实体名称,根据类型不同,定义不同,参考方法说明
- getSimpleName
- 简单名称
- getTypeName
- 类型名称
- getCanonicalName
- 规范名称
toString
- toString
- toGenericString
- 通过 getTypeParameters 获取泛型参数
继承关系
- isInstance
- 判断入参对象是否是当前类型的实例
- isAssignableFrom
- 确定此Class对象表示的类或接口是否与指定的Class参数表示的类或接口相同,或者是它们的超类或超接口。
- 一般用于判断当前类型是否为入参类型的父类或实现的接口
- 也用于判断是否可以将入参类型转换为当前类型
类型特征
- isInterface
- isArray
- isPrimitive
- isAnnotation
- isSynthetic
- 合成类,synthetic
- Synthetic 类型的类是指由编译器在编译时生成的、用于实现某些特殊功能或优化的类
- 例如,当内部类使用了外部类的私有成员时,编译器会生成一个 synthetic 类来包装内部类,以便访问到外部类的私有成员
- lambda表达式实现的类,例如
Runnable runnable = () -> System.out.println(123);
- isAnonymousClass
- 匿名类
- 例如
Runnable runnable2 = new Runnable() {@Override public void run() {}};
- isLocalClass
- 局部类
- 定义在方法或代码块中的类
- isMemberClass
- 成员类,也就是内部类
- isEnum
- 枚举
- isRecord
- 记录
- isHidden
- 隐藏类
- isSealed
- 密封类
类签名
- getModule
- 返回所属的模块
- getTypeParameters
- 返回泛型类型参数
- getSuperclass
- 返回直接超类
- 如果此Class表示Object类、接口、原始类型或 void,则返回 null
- 如果此Class对象表示数组类,则返回表示Object类的Class对象
- getGenericSuperclass
- 返回直接超类,带泛型信息
- getPackage
- getPackageName
- getInterfaces
- 返回直接实现的接口
- getGenericInterfaces
- 返回直接实现的接口,带泛型信息
- getComponentType
- 返回数组的元素类型
- getModifiers
- 返回此类或接口的 Java 语言修饰符,以整数编码
- 修饰符由 Java 虚拟机的public 、 protected 、 private 、 final 、 static 、 abstract和interface常量组成
它们应该使用类Modifier的方法进行解码
- getSigners
- 返回签名者数组
Enclosing
- getEnclosingMethod
- 如果此Class对象表示方法中的局部或匿名类,则返回表示基础类的直接封闭方法的Method对象
- 配合局部类使用
- isLocalClass
- getEnclosingConstructor
- getEnclosingClass
Declaring
- getDeclaringClass
- 如果此Class对象表示的类或接口是另一个类的成员,则返回表示声明它的类的Class对象
- 例如内部类
Calendar.Builder
返回Calendar
- isMemberClass
类内容
-
getClasses
- 获取一个类中定义的所有 public 类
- 例如
Calendar
返回内部类Calendar.Builder
-
getFields
- 返回所有 public 字段
-
getMethods
- 返回所有 public 方法,包括从父类继承的
-
getConstructors
- 返回所有 public 构造器
-
getField
- 根据名称获取 public 字段
-
getMethod
-
getConstructor
-
getDeclaredClasses
- 获取一个类中定义的所有类,不包括继承和实现的类
-
getDeclaredFields
- 返回此类声明的所有字段,包括私有的,不包括继承的
-
getDeclaredMethods
-
getDeclaredConstructors
-
getDeclaredField
-
getDeclaredMethod
-
getDeclaredConstructor
-
getRecordComponents
- 返回记录组件
-
getPermittedSubclasses
- 返回密封直接子类
-
getEnumConstants
- 返回此枚举类的元素
-
getAnnotatedSuperclass
- 返回带注解信息的父类
-
getAnnotatedInterfaces
- 返回带注解信息的父接口
-
getNestHost
- 获取嵌套类的最外层类
-
isNestmateOf
- 判断入参类型是否和当前类型属于同一个嵌套组
-
getNestMembers
- 获取当前类嵌套组中的所有类
Resource
- getClassLoader
- 类加载器
- getResourceAsStream
- 查找具有给定名称的资源,返回字节流
- getResource
- 查找具有给定名称的资源,返回 URL
转换
- cast
- 转换入参对象的类型
- asSubclass
- 转换到入参类型
其他
- getProtectionDomain
- 获取类的保护域信息
- desiredAssertionStatus
- 获取当前类是否开启了断言