个人笔记-反射

Class类与Java反射
一、反射概述
  • 通过Java反射机制,可以访问已经装载到JVM中的Java对象的描述,实现访问、检测和修改描述Java对象本身信息的功能

  • java.lang.refliect包提供了该功能的支持

  • 通过反射可访问的主要描述信息

在这里插入图片描述

二、访问构造方法
  • 如果要访问指定的构造方法,则需要根据该方法的入口参数的类型来访问;Constructor类的常用方法:
    在这里插入图片描述

  • Modifier类的常用解析方法

    方法功能描述
    isPublic(int mod)查看是否被public修饰符修饰,如果是返回true,否则返回false
    isProtected(int mod)查看是否被protected修饰符修饰,如果是返回true,否则返回false
    isPrivate(int mod)查看是否被private修饰符修饰,如果是返回true,否则返回false
    isStatic(int mod)查看是否被static修饰符修饰,如果是返回true,否则返回false
    isFinal(int mod)查看是否被finall修饰符修饰,如果是返回true,否则返回false
    toString(int mod)以字符串形式返回所有修饰符
  • 实例,判断对象constructor对象是否被private修饰,以及以字符串形式获得该构造方法的所有修饰符;

    int modifiers = constructor.getModifier();  //用getModifier方法解析constructor对象并将结果赋给modifier
    boolean  isEmbellishByPrivate = Modifier.isPrivate(modifiers); //判断构造方法是否被private修饰,并将结果赋给                                                                       //isEmbellishByPrivate
    String embellishment = Modifier.toString(modifiers);  //返回所有修饰符,并将结果赋给embellishment
    
三、访问成员变量
  1. 利用Field对象可以操纵相应的成员变量

  2. Filed类常用方法
    在这里插入图片描述

四、访问方法
  1. 利用Method对象可以操纵相应的方法

  2. Method类的常用方法
    在这里插入图片描述

五、定义Annotation(标注/注释)类型
  1. Annotation功能可以用于类、构造方法、成员变量、方法、参数等的声明中

  2. 定义Annotation类型的关键字为@interface,继承java.lang.annotation.Annotation接口

    • public @interface NoMemberAnnotation{
      }                      //未包含成员变量
      public @interface OneMemberAnnotation{
          String value(); 
      }                      //定义了一个成员变量
      public @interface MoreMemberAnnotation{
          String describe();
          Class type();
      }   //定义了多个成员
      public @interface DefaultMemberAnnotation{
          String describe() default"<默认值>";
          Class type() default void.class;
      }   //为成员定义了默认值
      /*成员类型:String / primitive /enumerated/annotation ,以及所列类型的数组
        成员名称:只有一个成员时通常将其设为value*/
      
    • 通过@Target来设置Annotation类型适用的程序元素种类,如未设置则表示适用于所有程序元素;枚举类ElementType中的枚举常量来设置@Target
      在这里插入图片描述

    • 通过@Retention可以设置Annotation的有效范围;用枚举类RetentionPolicy中的枚举常量来设置@Retention,如未设置,则Annotation的有效范围为CLASS表示的范围
      在这里插入图片描述

六、访问Annotation信息
  1. 如果在定义Annotation时将@Retention设置为RetentionPolicy.RUNTIME,那么在运行程序时通过反射就可以获取到相关的Annotation信息,如构造方法、字段、方法的Annotation信息。

    方法功能描述
    isAnnotationPresent(Class<?extends Annotstion> annotationClass)查看是否添加了指定类型的Annotation,若是则返回true,否则返回false
    getAnnotation(Class annotationClass)获得指定类型的Annotation,若存在则返回相应对象;否则返回null
    getAnnotations()获得所有的Annotation,返回一个Annotation数组
    getParameterAnnotations()获得为所有参数添加的Annotation,将以Annotation类型的二维数组返回;在数组中的顺序和声明时的顺序相同,若没有参数,则返回一个长度为0的数组;若存在未添加Annotation的参数,则用一个长度为0的嵌套数组占位
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>