@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. jquery插件手机

    1. http://jqtjs.com/preview/demos/main/index.html#home2. jquery weUI ===== 插件:https://blog.csdn.net/ ...

  2. Centos安装docker+vulhub搭建

    嫌弃平常因为复现搭建环境所带来的麻烦,所以打算用docker来管理搭建靶机 准备一个纯净的Centos系统虚拟机安装,这里已经安装好了就不演示怎么在虚拟机安装 安装Docker最基本的要求是Linux ...

  3. 前端以BASE64码的形式上传图片

    前端以BASE64码的形式上传图片 一直有一个很苦恼的问题困扰着铁柱兄,每次上传图片的时候前端要写一大堆js,然后后台也要写一堆java代码做处理.于是就在想,有没有简单又方便的方法把图片上传.今天算 ...

  4. 前端JS—显示赋值(一)

    一:js代码必须位于<script>js代码</script> 把js代码放到<body>元素的地步,可以改善显示速度 二:js显示数据 使用 window.ale ...

  5. Oracle 11g 精简客户端

    通常开发人员会装上一个 oracle客户端,但一般不会在自己的机器上安装Oracle database Oracle 客户端安装体积很大,但是装上去了基本上就用2个功能:TNS配置服务名和sqlplu ...

  6. Python 输出 log 到文件的方法

    import loggingfrom logging.handlers import RotatingFileHandler module_name = "test_module" ...

  7. C51_PID 水温控制系统

    C51_PID 水温控制系统 51CPIDUART水温控制 前言 通过C语言程序写入51单片机实现水的温度的采集,并通过控制器控制加热器给水体加热,对水体的温进行PID控制,保证温度在设定值范围内波动 ...

  8. git常用命令/git 部分高级命令备忘录

    常用命令 克隆 - git clone  git@gitee.com:niunafei1/git_learning.git git 创建分支 - git checkout -b dev git 切换分 ...

  9. 微软宣布一批新获得Microsoft Teams认证的会议硬件

    COVID-19 疾病流行期间,微软见到了 Microsoft Teams 视频会议解决方案取得的巨大增长.然而在许多情况下,生产力与音视频硬件的质量息息相关.好消息是,该公司刚刚完成了一批第三方硬件 ...

  10. 飞机大战-面向对象-pygame

    飞机大战 最近学习了python的面向对象,对面向对象的理解不是很深刻. 面向对象是数据和函数的'打包整理',将相关数据和处理数据的方法集中在一个地方,方便使用和管理. 本着学习的目的,在网上找了这个 ...