@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. 批量重命名脚本(Python)

    便携的批处理脚本,代码如下: import os import sys def rename(): path=input("请输入路径(例如D:/picture):") name= ...

  2. vs 基础

    1     写入 读取: 1)  写入:Console.Write("hello china")                                      光标紧跟 ...

  3. 数据结构(C语言版)---二叉树

    1.二叉树:任意一个结点的子结点个数最多两个,且子结点的位置不可更改,二叉树的子树有左右之分. 1)分类:(1)一般二叉树(2)满二叉树:在不增加树的层数的前提下,无法再多添加一个结点的二叉树就是满二 ...

  4. 11. this.setState更新问题

    this.setState是异步的,所以在this.setState之后不能立刻得到最新的state数据关于如何获取最新的数据,有如下三种方法 1.回调函数 this.setState({ xxx:' ...

  5. 使用binlog2sql工具来恢复数据库

    (一)binlog2sql介绍 binlog2sql是国内MySQL大佬danfengcao开发,许多MySQL爱好者参与改进的一款MySQL binlog解析软件.根据不同选项,可以得到原始SQL. ...

  6. pytorch Dataset数据集和Dataloader迭代数据集

    import torch from torch.utils.data import Dataset,DataLoader class SmsDataset(Dataset): def __init__ ...

  7. MySQL之慢日志记录、分页

    1.慢日志记录 slow_query_log = OFF #是否开启慢日志记录 long_query_time = 2 #时间限制,超过此时间,则记录 slow_query_log_file = C: ...

  8. Blazor WebAssembly 3.2.0 正式起飞,blazor 适合你吗?

    最近blazor更新很快,今天在官方博客上发布了Blazor WebAssembly 3.2.0 RC:https://devblogs.microsoft.com/aspnet/blazor-web ...

  9. [SketchUp]-绘制自己的家

    [SketchUp]-绘制自己的家 softsketchuphome 简介 最近已经完成了 毕业论文, 等待盲审的过程中, 将过去几年做的东西也都一一整理了, 硬盘中好几个不敢动的文件夹 也都可以删除 ...

  10. java 8 lambda表达式中的异常处理

    目录 简介 处理Unchecked Exception 处理checked Exception 总结 java 8 lambda表达式中的异常处理 简介 java 8中引入了lambda表达式,lam ...