1.注解

  • 注解也称元数据,是在代码中添加信息的一种方式添加的信息提供给编译器或者工具类框架使用。
  1. SE5引入,可以提供用来完整描述程序所需要的信息,往往这些信息是无法用Java来表达的。
  2. 注解可以在编译期的到检查。
  3. Java内置了三种标准注解
    1. @Override 确保重载方法的方法签名正确性
    2. @Deprecated 废弃此元素,如果使用会发出警告
    3. @SuppressWarnings 关闭不当的编译警告信息

2.定义注解

  • 定义注解和定义接口相似,注解和其他类一样会被编译成class文件。
  1. 定义一个Test注解,注解和类,接口一样,一个.java 文件中只能有一个public 注解

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface Test {}
  2. 元注解:用来声明自定义注解用于什么地方
  3. 注解中一般都有元素来表示某些值,没有元素就叫 标记注解 如 @Test 而且使用时可以不用加()

3 .元注解

  • 用来解释自定义注解的注解,表示自定义注解应该用到什么地方,作用,生命周期等。
  • 有四个元注解 @Target  @Retention  @ Documented   @Inherited
  1. @Target 表示注解该用在什么地方

    @Target(ElementType.TYPE)   //接口、类、枚举、注解
    @Target(ElementType.FIELD) //字段、枚举的常量
    @Target(ElementType.METHOD) //方法
    @Target(ElementType.PARAMETER) //方法参数
    @Target(ElementType.CONSTRUCTOR) //构造函数
    @Target(ElementType.LOCAL_VARIABLE)//局部变量
    @Target(ElementType.ANNOTATION_TYPE)//注解
    @Target(ElementType.PACKAGE) ///包
  2. @Retention 注解的保存策略,在哪个阶段保存注解信息
    @Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在class字节码文件中不包含
    @Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
    @Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
  3. @ Documented  将此注解包含在javadoc文件中
  4. @Inherited 允许子类继承父类注解。

4.注解元素

  • 注解元素可用类型有 : 基本数据类型,String , Class ,enum,Annotation 和 以上类型的数组
  • 注解元素不能是任何包装器类 和普通类。
  1. 定义注解元素和定义方法类似都有个()
  2. 每个元素不能有不确定的值,要么在使用时赋值,要么提供一个默认值。
  3. 注解只有一个元素此元素名称一定是value,使用的时候可以不写出名称直接赋值如@Test(" Hi ")
  4. 如果有多个元素赋值就得使用“名称 = 值” 赋值,value赋值也要写出value,没在()中出现的就取默认值。
    public @interface Test {
    public String value() default "lpk";
    public String des() default "";
    public int id() default -1;
    public Class c() ;
    }
    class People{
    @Test(value = "ooaa",c = People.class) //id取默认值
    public void fun(){
    }
    }

    因为元素必须有值,可以 取一些特殊值表示一个元素的缺失状态如 id = -1 ,des = 取空字符串 ""

5.使用注解

  • 在使用注解的元素前面加上注解即可
  • 一个注解不能继承另一个注解

6.注解处理器

  • 注解处理器一般利用反射来获取注解信息,生成代码提供给工具类和框架使用。
  • AnnotatedElement 接口 表示当前在此VM中运行的程序的注解元素。 该允许反射读取注解。
  • Class,Field,Method 都实现了该接口。

《Java编程思想》笔记 第二十章 注解的更多相关文章

  1. Java编程思想笔记(第二章)

    第二章  一切都是对象 尽管Java是基于C++的,但相比之下,Java是一种更纯粹的面向对象程序设计语言. c++和Java都是杂合型语言(hybird language) 用引用(referenc ...

  2. Java编程思想 笔记

    date: 2019-09-06 15:10:00 updated: 2019-09-24 08:30:00 Java编程思想 笔记 1. 四类访问权限修饰词 \ 类内部 本包 子类 其他包 publ ...

  3. java编程思想笔记(1)

    java编程思想笔记(1) 一,对象的创建和生命周期 对象的数据位于何处?怎样控制对象的生命周期? 在堆(heap)的内存池中动态地创建对象. java完全采用了动态内存分配方式. 二,垃圾回收器 自 ...

  4. #Java编程思想笔记(一)——static

    Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...

  5. 2.1(java编程思想笔记)位移操作

    java位移操作主要有两种: 有符号位移:有符号位移会保留原有数字正负性,即正数依然是正数,负数依然是负数. 有符号位左移时,低位补0. 有符号右移时:当数字为正数,高位补0.当数字为负时高位补1. ...

  6. 【Java编程思想笔记】注解--元注解

    参考文章:(小白的小小白的白 )https://blog.csdn.net/weixin_42315600/article/details/80630669 https://www.cnblogs.c ...

  7. 【Java编程思想笔记】注解1-简单了解注解

    文章参考:https://www.cnblogs.com/xuningchuanblogs/p/7763225.html https://www.cnblogs.com/xdp-gacl/p/3622 ...

  8. 【Java编程思想笔记】注解--自定义注解

    文章参考自:https://www.cnblogs.com/xdp-gacl/p/3622275.html 学习网站:how2java.cn 一.自定义注解的创建过程 第一步:(元注解)   使用元注 ...

  9. 7.JAVA编程思想笔记隐藏实施过程

    欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/51040237 "进行面向对象的设计时,一项主要的考虑是:怎样将发生变 ...

随机推荐

  1. Go基础篇【第6篇】: 内置库模块 flag

    import "flag" flag包实现了命令行参数的解析.每个参数认为一条记录,根据实际进行定义,到一个set集合.每条都有各自的状态参数. 在使用flag时正常流程: 1.  ...

  2. linux学习(一)——学习之路

    首先,要学Linux编程,你得会用Linux,也就是得在命令行环境下生存下来.什么叫生存下来呢?就是我现在给你一台主机,键盘,显示器啥的,然后给你一个服务器版的Linux系统的光盘或者其他什么安装盘, ...

  3. 最快的Hash表算法

    我们由一个简单的问题逐步入手:有一个庞大的字符串数组,然后给你一个单独的字符串,让你从这个数组中查找是否有这个字符串并找到它,你会怎么做?有一个方法最简单,老老实实从头查到尾,一个一个比较,直到找到为 ...

  4. capacilitys 持续集成

    目前看好像是说以docker为例来看看这个权限到底是怎么来的? 可以通过在二进制上setcap得到,也可以通过函数自己用setcap得到,两种方法,docker肯定是第二种方法啊,docker中间肯定 ...

  5. 【bzoj4724】[POI2017]Podzielno 二分

    题目描述 B进制数,每个数字i(i=0,1,...,B-1)有a[i]个.你要用这些数字组成一个最大的B进制数X(不能有前导零,不需要用完所有数字),使得X是B-1的倍数.q次询问,每次询问X在B进制 ...

  6. hdu3068最长回文(Manacher算法)

    简单来说这是个很水的东西.有点dp的思想吧.推荐两个博客,很详细. http://blog.csdn.net/xingyeyongheng/article/details/9310555 http:/ ...

  7. BZOJ 2820: YY的GCD | 数论

    题目: 题解: http://hzwer.com/6142.html #include<cstdio> #include<algorithm> #define N 100000 ...

  8. [学习笔记]最小割之最小点权覆盖&&最大点权独立集

    最小点权覆盖 给出一个二分图,每个点有一个非负点权 要求选出一些点构成一个覆盖,问点权最小是多少 建模: S到左部点,容量为点权 右部点到T,容量为点权 左部点到右部点的边,容量inf 求最小割即可. ...

  9. IOI1998 Polygon [区间dp]

    [IOI1998]Polygon 题意翻译 题目可能有些许修改,但大意一致 多边形是一个玩家在一个有n个顶点的多边形上的游戏,如图所示,其中n=4.每个顶点用整数标记,每个边用符号+(加)或符号*(乘 ...

  10. rman异机恢复,全部恢复和增量恢复

    1.首先准备工作:hostname 192.168.222.11 ol7.localdomain ol7建立相关目录:mkdir -p /u01/app/oracle/oradata/DB11G/mk ...