反射

反射

反射是框架设计的灵魂

概述

反射就是把java类中的各种成分映射成一个个的Java对象

例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。

(其实:一个类中这些成员方法、构造方法、在加入类中都有一个类来描述

理解

Class

Class是一个类,封装了当前对象所对应的类的信息

public final class Class extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement

概述

Class 类的实例表示正在运行的 Java 应用程序中的类和接口。也就是jvm中有N多的实例每个类都有该Class对象。(包括基本数据类型)

Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的defineClass 方法自动构造的。也就是这不需要我们自己去处理创建,JVM已经帮我们创建好了。

. 小写class表示是一个类类型,大写Class表示这个类的名称

创建

1.通过类名获取 类名.class

2.通过对象获取 对象名.getClass()

3.通过全类名获取 Class.forName(全类名)

常见方法

    • asSubclass(类 clazz) 这个 对象来表示由指定的类对象表示的类的子类。
      Tcast(Object obj) 施放一个目的是通过本表示的类或接口 对象。
      booleandesiredAssertionStatus() 如果要在调用此方法时初始化该类,则返回将分配给此类的断言状态。
      static 类forName(String className) 返回与给定字符串名称的类或接口相关联的 对象。
      static 类forName(String name, boolean initialize, ClassLoader loader) 使用给定的类加载器返回与给定字符串名称的类或接口相关联的 对象。
      AnnotatedType[]getAnnotatedInterfaces() 返回一个 AnnotatedType对象的数组, AnnotatedType使用类型指定由此 AnnotatedType对象表示的实体的超级
      AnnotatedTypegetAnnotatedSuperclass() 返回一个 AnnotatedType对象,该对象表示使用类型来指定由此 对象表示的实体的 类。
      AgetAnnotation(类 annotationClass) 返回该元素的,如果这样的注释 *,*否则返回null指定类型的注释。
      Annotation[]getAnnotations() 返回此元素上 存在的注释。
      A[]getAnnotationsByType(类 annotationClass) 返回与此元素相关 联的注释
      StringgetCanonicalName() 返回由Java语言规范定义的基础类的规范名称。
      类[]getClasses() 返回包含一个数组 表示所有的公共类和由此表示的类的成员接口的对象 对象。
      ClassLoadergetClassLoader() 返回类的类加载器。
      getComponentType() 返回 数组的组件类型的Class。
      ConstructorgetConstructor(类... parameterTypes) 返回一个 Constructor对象,该对象反映 Constructor对象表示的类的指定的公共 函数。
      Constructor[]getConstructors() 返回包含一个数组 Constructor对象反射由此表示的类的所有公共构造 对象。
      AgetDeclaredAnnotation(类 annotationClass) 如果这样的注释 直接存在 ,则返回指定类型的元素注释,否则返回null。
      Annotation[]getDeclaredAnnotations() 返回 直接存在于此元素上的注释。
      A[]getDeclaredAnnotationsByType(类 annotationClass) 如果此类注释 直接存在或 *间接存在,*则返回该元素的注释(指定类型)。
      类[]getDeclaredClasses() 返回一个反映所有被这个 对象表示的类的成员声明的类和 对象的数组。
      ConstructorgetDeclaredConstructor(类... parameterTypes) 返回一个 Constructor对象,该对象反映 Constructor对象表示的类或接口的指定 函数。
      Constructor[]getDeclaredConstructors() 返回一个反映 Constructor对象表示的类声明的所有 Constructor对象的数组
      FieldgetDeclaredField(String name) 返回一个 Field对象,它反映此表示的类或接口的指定已声明字段 对象。
      Field[]getDeclaredFields() 返回的数组 Field对象反映此表示的类或接口声明的所有字段 对象。
      方法getDeclaredMethod(String name, 类... parameterTypes) 返回一个 方法对象,它反映此表示的类或接口的指定声明的方法 对象。
      方法[]getDeclaredMethods() 返回包含一个数组 方法对象反射的类或接口的所有声明的方法,通过此表示 对象,包括公共,保护,默认(包)访问和私有方法,但不包括继承的方法。
      getDeclaringClass() 如果由此 对象表示的类或接口是另一个类的成员,则返回表示其声明的类的 对象。
      getEnclosingClass() 返回底层类的即时封闭类。
      ConstructorgetEnclosingConstructor() 如果此对象表示构造函数中的本地或匿名类,则返回表示底层类的立即封闭构造函数的Constructor对象。
      方法getEnclosingMethod() 如果此对象表示方法中的本地或匿名类,则返回表示基础类的即时封闭方法的方法对象。
      T[]getEnumConstants() 返回此枚举类的元素,如果此Class对象不表示枚举类型,则返回null。
      FieldgetField(String name) 返回一个 Field对象,它反映此表示的类或接口的指定公共成员字段 对象。
      Field[]getFields() 返回包含一个数组 Field对象反射由此表示的类或接口的所有可访问的公共字段 对象。
      Type[]getGenericInterfaces() 返回 Type表示通过由该对象所表示的类或接口直接实现的接口秒。
      TypegetGenericSuperclass() 返回 Type表示此所表示的实体(类,接口,基本类型或void)的直接超类
      类[]getInterfaces() 确定由该对象表示的类或接口实现的接口。
      方法getMethod(String name, 类... parameterTypes) 返回一个 方法对象,它反映此表示的类或接口的指定公共成员方法 对象。
      方法[]getMethods() 返回包含一个数组 方法对象反射由此表示的类或接口的所有公共方法 对象,包括那些由类或接口和那些从超类和超接口继承的声明。
      intgetModifiers() 返回此类或接口的Java语言修饰符,以整数编码。
      StringgetName() 返回由 对象表示的实体(类,接口,数组类,原始类型或空白)的名称,作为 String
      软件包getPackage() 获取此类的包。
      ProtectionDomaingetProtectionDomain() 返回 ProtectionDomain
      URLgetResource(String name) 查找具有给定名称的资源。
      InputStreamgetResourceAsStream(String name) 查找具有给定名称的资源。
      Object[]getSigners() 获得这个类的签名者。
      StringgetSimpleName() 返回源代码中给出的基础类的简单名称。
      getSuperclass() 返回 表示此所表示的实体(类,接口,基本类型或void)的超类
      StringgetTypeName() 为此类型的名称返回一个内容丰富的字符串。
      TypeVariable<类>[]getTypeParameters() 返回一个 TypeVariable对象的数组,它们以声明顺序表示由此 GenericDeclaration对象表示的通用声明声明的类型变量。
      booleanisAnnotation() 如果此 对象表示注释类型,则返回true。
      booleanisAnnotationPresent(类 annotationClass) 如果此元素上 存在指定类型的注释,则返回true,否则返回false。
      booleanisAnonymousClass() 返回 true当且仅当基础类是匿名类时。
      booleanisArray() 确定此 对象是否表示数组类。
      booleanisAssignableFrom(类 cls) 确定由此 对象表示的类或接口是否与由指定的Class 表示的类或接口相同或是超类或 接口。
      booleanisEnum() 当且仅当该类在源代码中被声明为枚举时才返回true。
      booleanisInstance(Object obj) 确定指定的Object是否与此 Object表示的对象分配
      booleanisInterface() 确定指定 对象表示接口类型。
      booleanisLocalClass() 返回 true当且仅当基础类是本地类时。
      booleanisMemberClass() 返回 true当且仅当基础类是成员类时。
      booleanisPrimitive() 确定指定 对象表示一个基本类型。
      booleanisSynthetic() 如果这个类是一个合成类,返回true ; 返回false其他。
      TnewInstance() 创建由此 对象表示的类的新实例。
      StringtoGenericString() 返回描述此 的字符串,包括有关修饰符和类型参数的信息。
      StringtoString() 将对象转换为字符串。

常用相关类

ClassLoader

public abstract class ClassLoader extends Object

类加载器是负责加载类的对象。 ClassLoader类是一个抽象类。 给定一个类的binary name ,类加载器应该尝试定位或生成构成类的定义的数据。 典型的策略是将名称转换为文件名,然后从文件系统中读取该名称的“类文件”。

``InputStreamgetResourceAsStream(String name) 返回用于读取指定资源的输

Field

public final class Field extends AccessibleObject implements Member

Field提供有关类或接口的单个字段的信息和动态访问。

public void setAccessible(boolean flag) throws SecurityException

将此对象的accessible标志设置为指示的布尔值。 true的值表示反射对象应该在使用时抑制Java语言访问检查。 false的值表示反映的对象应该强制执行Java语言访问检查。

get(Object obj)获得obj中对应的属性值
set(Object obj, Object value)设置obj中对应属性值
Method

public final class Method extends Executable

方法提供有关类和接口上单一方法的信息和访问权限。 反映的方法可以是类方法或实例方法(包括抽象方法)。

public Object invoke(Object obj, Object… args) throws IllegalAccessException,IllegalArgumentException,
InvocationTargetException

在具有指定参数的方法对象上调用此方法对象表示的基础方法。个别参数自动解包以匹配原始形式参数,原始参考参数和参考参数都需要进行方法调用转换。

如果底层方法是静态的,则指定的obj参数将被忽略。 它可能为null。

如果底层方法所需的形式参数的数量为0,则提供的args数组的长度为0或为空。

Constructor

public final class Constructor extends Executable

Constructor提供了一个类的单个构造函数的信息和访问。

public T newInstance(Object… initargs) throws InstantiationException, IllegalAccessException,
IllegalArgumentExceptio , InvocationTargetException

使用由此Constructor对象表示的构造函数,使用指定的初始化参数创建和初始化构造函数的声明类的新实例。个别参数自动解包以匹配原始形式参数,原始参考参数和参考参数都需要进行方法调用转换。

如果底层构造函数所需的形式参数的数量为0,则提供的initargs数组的长度为0或为空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值