注解的定义

注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

注解的作用

注解不是程序本身,但是可以对程序做出解释(这一点跟注释没什么区别)。

可以被其它程序(比如编译器)读取(注解信息处理流程,是注解和注释的重大区别。如果没有注解信息处理流程,则注解毫无意义)。

Annotation的格式

注解是以“@注释名”在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked")

Annotation使用场景

可以附加在package、class、method、field等上面,相当于给它们添加了额外的辅助信息,我们可以通过反射机制编程实现对这些元数据的访问。

注解的分类

根据注解的作用域@Retention,注解分为:
                   RetentionPolicy.SOURCE: 源码注解,只在源码中存在;
                   RetentionPolicy.CLASS: 编译时注解,在class中依然存在,如@Deprecated;
                   RetentionPolicy.RUNTIME: 运行时注解,运行阶段起作用,如@Autowired

按照注解的来源,也是分为3类(我们以这种分类来介绍注解):
                  内置注解,即JDK自带注解,如@Override ,@Deprecated等等;
                  第三方注解,如Hibernate, Struts等的注解;
                  自定义注解,即自己定义的一些注解。

元注解

元注解的作用就是负责注解其它注解。Java定义了4个标准的meta-annotation类型,它们被用来提供对其它annotation类型做说明。这些类型和它们所支持的类在java.lang.annotation包中可以找到:

  • @Target

作用:指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在Target元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。

所修饰范围 取值ElementType
package包 PACKAGE
类、接口、枚举、Annotation类型 TYPE
类型成员(方法、构造方法、成员变量、枚举值)

CONSTRUCTOR:用于描述构造器

FIELD:用于描述域

METHOD:用于描述方法

方法参数和本地变量

LOCAL_VARIABLE:用于描述局部变量

PARAMETER:用于描述参数

例如:@Target(value=ElementType.METHOD)表示这个注解只能用在方法上面

  • @Retention

作用:指示注释类型的注释要保留多久。如果注释类型声明中不存在Retention注释,则保留策略默认为 RetentionPolicy.CLASS。只有元注释类型直接用于注释时,Target元注释才有效。如果元注释类型用作另一种注释类型的成员,则无效。

取值RetentionPolicy 作用
SOURCE 在源文件中有效(即源文件保留)
CLASS 在class文件中有效(即class保留)
RUNTIME 在运行时有效(即运行时保留),为Runtime可以被反射机制读取
  • @Documented

作用:指示某一类型的注释将通过javadoc和类似的默认工具进行文档化。应使用此类型来注释这些类型的声明:其注释会影响由其客户端注释的元素的使用。如果类型声明是用Documented来注释的,则其注释将成为注释元素的公共API的一部分。

  • @Inherited

作用:指示注释类型被自动继承。如果在注释类型声明中存在Inherited元注释,并且用户在某一类声明中查询该注释类型,同时该类声明中没有此类型的注释,则将在该类的超类中自动查询该注释类型。此过程会重复进行,直到找到此类型的注释或到达了该类层次结构的顶层 (Object) 为止。如果没有超类具有该类型的注释,则查询将指示当前类没有这样的注释。

注意,如果使用注释类型注释类以外的任何事物,此元注释类型都是无效的。还要注意,此元注释仅促成从超类继承注释;对已实现接口的注释无效。

内置注解

JDK中自带的注解,我们常见的如:

@Override:定义在java.lang.Override中,此注解只适用于修饰方法,表示一个方法声明打算重写超类中的另一个方法声明。例如以下代码片段,是打算重写toString方法:

public class Demo01 {@Overridepublic String toString() {return super.toString();}
}

@Deprecated:定义在java.lang.Deprecated中,此注解可用于修饰方法、属性、类,表示不鼓励程序员用这样的元素,通常是因为它很危险或者存在更好的选择。在我们使用被这个注解修饰的元素时,元素名会显示一条横线,如下图所示,test0001()被这个注解修饰,则调用test0001()这个方法时,test0001()方法名显示一条横线:

还有很多JDK内置的注解,这里不再一一展示。

第三方注解

第三方注解的使用方法和内置注解是相同的,需要我们根据自己使用的框架,去了解相关常用注解。

自定义注解

我们自定义注解,需要使用@interface,使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口。使用@interface来声明一个注解的格式为:

public @interface 注解名{定义体}

其中的每一个方法实际上是声明了一个配置参数:
                  方法的名称就是参数的名称;
                  返回值类型就是参数的类型(返回值类型只能是基本类型、Class、String、enum);
                  可以通过default来声明参数的默认值;
                  如果只有一个参数成员,一般参数名为value。

注意:
                  注解元素必须要有值。我们定义注解元素时,经常使用空字符串、0作为默认值。
                  也经常使用负数(比如-1)表示不存在的含义。

参考资料:百度百科;JDK API;尚学堂Java视频。

自定义注解的Demo将在下一篇文章中展示。

Java学习笔记之--------注解(Annotation)相关推荐

  1. Java学习笔记7-2——注解与反射

    目录 理解 Class 类并获取 Class 实例 Class类 获取 Class 类的实例 哪些类型可以有Class对象 所有类型的Class对象 从内存角度分析类加载[重点] 类加载的过程 什么时 ...

  2. Java学习笔记7-1——注解与反射

    目录 注解 注解是啥 内置注解 元注解 @Target @Retention @Documented @Inherited 自定义注解 反射 静态语言 和 动态语言 Java 反射机制概述 Java ...

  3. Java学习笔记整理-知识梳理+JDK1.8详细文档

    链接:java开发手册 提取码:kes8 链接:JDK1.8详细文档 提取码:n9zo JavaSE 面向对象编程(Object-oriented programming) 封装 类(class) 类 ...

  4. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  5. Java学习笔记-Day64 Spring 框架(二)

    Java学习笔记-Day64 Spring 框架(二) 一.控制反转IOC和依赖注入DI 1.控制反转IOC 2.依赖注入DI 3.Spring IOC容器 3.1.简介 3.2.实现容器 3.2.获 ...

  6. java学习笔记11--Annotation

    java学习笔记11--Annotation Annotation:在JDK1.5之后增加的一个新特性,这种特性被称为元数据特性,在JDK1.5之后称为注释,即:使用注释的方式加入一些程序的信息. j ...

  7. java学习笔记:全部,txt版本

    java学习笔记:全部,txt版本 笔者注: 1.不知道怎么上传附件,所以就把txt文本内容全部贴在这里吧. 2.已经把txt版本的笔记上传到CSDN了,我没有设置索要积分才能下载,但是不知道为什么C ...

  8. java学习笔记13--反射机制与动态代理

    本文地址:http://www.cnblogs.com/archimedes/p/java-study-note13.html,转载请注明源地址. Java的反射机制 在Java运行时环境中,对于任意 ...

  9. 准备写java学习笔记

    准备写java学习笔记 java int 转载于:https://blog.51cto.com/cryingcloud/1975267

最新文章

  1. 数据结构之图的创建(邻接表)
  2. Lucene索引库的维护功能实现
  3. 安防市场规模超万亿 罗曼股份推智慧联动安防
  4. HDU 2047 阿牛的EOF牛肉串
  5. yeoman生成react基本架构
  6. C#6中的新增功能 【Unity3D亲测】
  7. HDFS异常:last block does not have enough number of replicas
  8. SHOP++ JTM2.5发布
  9. 【软件工程习题答案】第八章 维护
  10. 初学STM32F205的库包搭建工程
  11. windows安装hbase1.4.9
  12. Qt开发的超轻量http server
  13. 笔记:《高效能人士的七个习惯》第十一章 再论由内而外造就自己
  14. 旅行社H5广告宣传怎么做?
  15. 可能是最好用的单文件制作工具jexchan下载 | 含jexchan单文件制作工具使用详细教程
  16. N4110解决WIN10黑屏问题
  17. 保利威视sdk与腾讯bugly 冲突解决方案
  18. C语言值的引用传递—引用传递(地址传递)
  19. 常见的生化检测指标及其意义
  20. Java实现-数字组合1

热门文章

  1. Windows Service服务 出现System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志
  2. 验房师丨一个标准的验房师具备哪些条件,验房项目问题参考规范
  3. PostgreSQL+PostGIS实现两坐标点之间最短路径查询算法函数(地图工具篇.12)
  4. 微信公众号最佳实践 ( 4.4)客服接口
  5. 无线路由器WEP加密破解--蹭网(转)
  6. codewars练习(javascript)-2021/2/1
  7. 一个免费提供Linux相关ebook的站点
  8. 华为认证723(自用)
  9. 5G专网核心网部署模式与挑战
  10. tushare获取财报数据并存入mysql