20230525 java.lang.Class

发布时间 2023-09-04 10:36:23作者: 流星<。)#)))≦

介绍

  • 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
    • 获取当前类是否开启了断言