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. SSH面试集锦——不看后悔哦!

    1.        谈谈你mvc的理解 MVC是Model-View-Controler的简称.即模型-视图-控制器.MVC是一种设计模式,它强制性的把应用程序的输入.处理和输出分开. MVC中的模型 ...

  2. BZOJ4311 向量(线段树分治+三分)

    由点积的几何意义(即投影)可以发现答案一定在凸壳上,并且投影的变化是一个单峰函数,可以三分.现在需要处理的只有删除操作,线段树分治即可. #include<iostream> #inclu ...

  3. BZOJ2818 GCD 【莫比乌斯反演】

    2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MB Submit: 6826 Solved: 3013 [Submit][Status][Discuss ...

  4. 洛谷 P4168 [Violet]蒲公英 解题报告

    P4168 [Violet]蒲公英 题目背景 亲爱的哥哥: 你在那个城市里面过得好吗? 我在家里面最近很开心呢.昨天晚上奶奶给我讲了那个叫「绝望」的大坏蛋的故事的说!它把人们的房子和田地搞坏,还有好多 ...

  5. [洛谷P2073] 送花

    送花 题目背景 小明准备给小红送一束花,以表达他对小红的爱意.他在花店看中了一些花,准备用它们包成花束. 题目描述 这些花都很漂亮,每朵花有一个美丽值W,价格为C. 小明一开始有一个空的花束,他不断地 ...

  6. Avito Cool Challenge 2018 A. B题解

    A. Definite Game 题目链接:https://codeforces.com/contest/1081/problem/A 题意: 给出一个数v,然后让你可以重复多次减去一个数d,满足v% ...

  7. Substrings Sort string 基本操作

    You are given nn strings. Each string consists of lowercase English letters. Rearrange (reorder) the ...

  8. AWS nat monitor and route switch script

    This script will monitor another NAT instance and take over its routes if communication with the oth ...

  9. Linux 安装编译 FFMPEG

    资源准备: ffmpeg-3.4.tar.bz2 yasm-1.3.0.tar.gz 编译安装: 本人二进制包存放在 /opt/moudles中, 解压缩在 /opt/softwares 解包 ffm ...

  10. javascript错误处理(转)

    1.onerror事件处理函数onerror事件处理函数是第一个用来协助javascript处理错误的机制.页面上出现异常时,error事件便在window对象上触发.例如: <html> ...