@Retention是java当中的一个元注解,该元注解通常都是用于对软件的测试

1、适用方式:

    @Retention(RetentionPolicy.RUNTIME)

    @interface Task{.......}

    参数RetentionPolicy.RUNTIME就说明了,@Task注解在程序运行时是可见的

    RetentionPolicy的枚举类型还有SOURCE、CLASS分别指定注解对于那个级别是可见的,但是

    我们一般都是用RUNTIME,因为这是在程序运行时可以对注解进行读取,从而易于软件的测试

2、接下来我们要先介绍一下java程序的内省和反射机制,之后在讨论@Retention的具体用法实例

   在java虚拟机JVM在运行时,就会将类进行加载,这时,每个类都会生成一个Class数据类型的

   对象(Class类在java.lang.Class中),这个对象就是对应类的“运行时对象”,通过这个

   运行时对象,就能够获取对应类的许多信息,也就是说,运行时对象实际就是对应类的一个映射

   这就java的内省反射机制

 

 

3、接下来我们讨论一下,这个Class运行时对象的使用

   ①获取对应类的Class数据类型的运行时对象的引用——getClass()

     public class Point{.....} //声明一个类

     Point pt = new Point(); //创建对应类的实例对象

     Class cls = pt.getClass() ;    //则cls 就指向了Point类的运行时对象

   ②运行时对象cls的成员函数

     <1>public String  getName()

        返回对应类的类名

     <2>public boolean isAnnotationPresent(注解名.class)

     判定指定的"注解"是否在运行时注解了 cls 的对应类

     <3>public boolean isAnnotation();

     判定cls 是否在运行时被任何注解 注解过

     <4>public A getAnnotation(注解名.class)

     A 指的是一个注解的类型,具体用法如下:

     @Retention(RetentionPolicy.RUNTIME) //指定@Task运行时可见

     @interface Task{String descirption(); }

     @Task(descroption="NoFinished")   //为computer作注

     class Computer{.....} 

 

     则  Computer my = new Computer() ;

         Class cls = my.getClass() ;

         Task tk = (Task) cls.getAnnotation(Task.class);

         //这时 tk 就指向了标注Computer的注解@Task

         tk.description(); //调用@Task中的description(),输出"NoFinishing"

    <5> public Method[] getMethods()

        返回由对应类中的所有的方法形成的Method数组,每个Method对象都唯一对应

        一个对应类中的方法,通过Method[i]就可以获得对应方法的信息

        (Method类在java.lang.reflect.Method中)

3、这个Method类也有很多成员方法,用来获取对应的方法的信息

   如也有:

       public boolean isAnnotationPresent(注解名.class)

       判定对应的方法是否被指定的注所注解

       public A getAnnotation(注解名.class)

       用法和上面的讲述的一样,之不过创建的注解型的引用变量指向的是 "标记对应方法的注解"

 

 

4、上面将所有的成员方法只有在注解运行时可见的情况下才能够发挥作用,

    所以@Retention变得很有用

@Retention的用法实例:

  

运行结果:

 

Java元注解@Retention规则的更多相关文章

  1. Java元注解—— @Retention @Target @Document @Inherited

    java中元注解有四个: @Retention @Target @Document @Inherited: @Retention:注解的保留位置 @Retention(RetentionPolicy. ...

  2. java元注解 @Retention注解使用

    @Retention定义了该Annotation被保留的时间长短: 1.某些Annotation仅出现在源代码中,而被编译器丢弃: 2.另一些却被编译在class文件中,注解保留在class文件中,在 ...

  3. 使用Java元注解和反射实现简单MVC框架

    Springmvc的核心是DispatcherServlet来进行各种请求的拦截,进而进行后续的各种转发处理.流程图如下: 说明:客户端发出一个http请求给web服务器,web服务器对http请求进 ...

  4. Spring注解与Java元注解小结

    注解 Annotation 基于注解的开发,使得代码简洁,可读性高,简化的配置的同时也提高了开发的效率,尤其是SpringBoot的兴起,随着起步依赖和自动配置的完善,更是将基于注解的开发推到了新的高 ...

  5. Java 元注解

    元注解@Target,@Retention,@Documented,@Inherited * * @Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括: * Elemen ...

  6. Java元注解

    元注解是指注解的注解,包括@Retention @Target @Document @Inherited四种. 1.@Retention: 定义注解的保留策略@Retention(RetentionP ...

  7. java元注解(注解在注解上的注解)

    //ElementType.TYPE 给类.接口.枚举上使用 @Target(ElementType.TYPE)//给注解进行注解,表示该注解可以用在什么地方 //@Retention(Retenti ...

  8. Java元注解,简单案例

    [注解] 程序中有 注释 和注解 * 注释:给开发人员. * 注解:给计算机看的. 注解使用:学习框架支持注解开发. [JDK提供的注解] @Override :描述方法的重写. @SuppressW ...

  9. java的四个元注解 @Retention @Target @Document @Inherited

    1.  @Retention  :注解的保留位置 @Retention(RetentionPolicy.SOURCE)  //注解仅存在于源码中,在class字节码文件中不包含 @Retention( ...

随机推荐

  1. 1. esc 安装 jenkins

    $ yum install yum-fastestmirror -y #安装自动选择最快源的插件 #添加jenkins源: $ sudo wget -O /etc/yum.repos.d/jenkin ...

  2. Os-hackNos-1靶机过关记录

    靶机地址:172.16.1.198(或112)  kali地址:172.16.1.108 1 信息收集 靶机界面如下 简单查看 OS:Ubuntu Web:Apache2.4.18 尝试端口扫描 开放 ...

  3. TensorFlow-keras fit的callbacks参数,定值保存模型

    from tensorflow.python.keras.preprocessing.image import load_img,img_to_array from tensorflow.python ...

  4. 从零开始装CentOS以及配置Redis,前端都可以!!!

    ##### 从零开始装CentOS以及配置Redis 1.新建虚拟机 --- ![image](https://img2018.cnblogs.com/blog/1334966/201910/1334 ...

  5. 高德地图首席科学家任小枫QA答疑汇总丨视觉+地图技术有哪些新玩法?

    上周,阿里巴巴高德地图首席科学家任小枫在#大咖学长云对话#的在线直播活动上就计算机视觉相关技术发展以及在地图出行领域的应用与大家做技术交流,直播间互动火爆,尤其在QA环节,学弟学妹们纷纷就感兴趣的视觉 ...

  6. application/x-www-form-urlencoded ,multipart/form-data, text/plain

    APPLICATION/X-WWW-FORM-URLENCODED MULTIPART/FORM-DATA TEXT/PLAIN 后台返回的数据响应的格式类型 application/x-www-fo ...

  7. python学习19类5之多态与鸭子模型

    '''''''''一.多态1.Python中多态是指一类事物有多种形态.''' class Animal: def run(self): raise AttributeError('子类必须实现这个方 ...

  8. 定期清理nohup.out

    事件背景 服务应用weblogic通过nohup启动. nohup的使用全部都在weblogic域中的bin目录下 但是没有做定期nohup.out的清理 导致核心服务的日志过大,在出现问题时候难以打 ...

  9. JDK 14的新特性:instanceof模式匹配

    JDK 14的新特性:instanceof模式匹配 JDK14在2020年的3月正式发布了.可惜的是正式特性只包含了最新的Switch表达式,而Records,patterns,text blocks ...

  10. Libra教程之:Libra协议的关键概念

    文章目录 Libra协议 交易和状态 交易详解 账本状态详解 版本数据库 账户 账户地址 Proof 验证节点 存储 Libra协议 Libra协议是Libra区块链的基础,本文主要讲解Libra协议 ...