Java 注解(Annotation)又称之为 Java 标注、元数据,是 Java 1.5 之后加入的一种特殊语法,通过注解可以标注 Java 中的类、方法、属性、参数、包等,可以通过反射原理对这些元数据进行访问,注解的使用不会影响程序的正常运行,只会对编译器警告等辅助工具产生影响。

注解功能

  • 编译器可以使用注解来检测错误和取消警告;
  • 使用注解可以生成特定代码,如 ButtferKnife 使用注解简化 findViewById等;
  • 某些注解可以在运行时进行检查和操作。

定义注解

注解的定义使用 @interface 作为关键字,实际上表示自动继承了 java.lang.annotation.Annotation 接口,定义格式参考如下:

@元注解

配置参数里面的类型包括基本类型、String、class、枚举以及相关类型的数组,可以使用 default 设置配置参数的默认值,定义一个注解具体如下:

@Target

内置注解

  1. @Override
  2. @Deprecated
  3. @SuppressWarnings

下面是上面三个内置注解的声明:

//表示当前的方法将覆盖超类中的方法,编译时进行格式检查

根据对上面三个注解的声明来看,@SuppressWarnings 中定义了一个数组,这个数组表示在该注解上具体的目标是那些,如可在 SuppressWarnings 上使用的值,常用的具体如下:

  • deprecation:使用了过时的类或方法时的警告
  • unused:有未使用的变量时的警告
  • unchecked:执行了未检查的转换时的警告
  • fallthrough:当 switch 程序块直接通往下一种情况而没有 break 时的警告
  • path:在类路径、源文件路径等中有不存在的路径时的警告
  • serial:当在可序列化的类上缺少serialVersionUID 定义时的警告
  • finally :任何 finally 子句不能正常完成时的警告
  • all:关于以上所有情况的警告

下面看一个案例,具体如下:

public 

上面的代码如果使用 eclipse 等其他 IDE 时会出现两个警告,一是使用了过时的 API,二是变量 date 赋值后没有被使用过,警告截图如下:

当然, IDE 会提示是否添加 SuppressWarnings 来取消这些警告,前文中可以看到注解 @SuppressWarnings 的声明中需要配置参数,这个参数是一个数组,数组名称是 value,可以省略这个名称, 具体如下:

//不省略
public void test2() {@SuppressWarnings(value= {"deprecation", "unused"})long date = Date.parse("2018-04-22");
}
//省略
public void test2() {@SuppressWarnings({"deprecation", "unused"})long date = Date.parse("2018-04-22");
}

来张截图说明一下使用 @SuppressWarnings 的效果,具体如下:

如果只想取消一种警告可以这样写,具体如下:

//第一种

注意:如果在定义注解的配置参数名称为 value,那么可以在配置注解时可以省略 value,反之,使用其他名称,则必须采用第一种方式,要指定配置参数名称。

当然其他注解和 @SuppressWarnings 也比较类似, @Override、@Deprecated 由它们的声明可知直接使用即可,不需要指定具体目标,在其声明注解时用到了 @Documented、@Retention、@Target 等,这些用来注解其他注解的特殊注解称之为元注解,具体请看下文。

元注解

  1. @Target
  2. @Retention
  3. @Documented
  4. @Inherited

@Target

@Target 用来描述注解的使用范围,它的声明如下:

@Documented

由 @Target 声明可知使用 @Target 注解必须指定具体的 Java 成员,也就是该注解要使用到哪个位置,具体由枚举 ElementType 中定义,具体如下:

public 

@Retention

@Retention 表示在什么级别保存该注解的信息,它的声明如下:

@Documented

由 @Retention 的声明可知,使用 @Retention 时,必须指定保存celue(RetentionPolicy),具体值如下:

public 

@Documented@Inherited 都没有配置参数,是一种标记注解,@Documented 表示将该注解显示到用户文档中,@Inherited 表示该注解只有使用在类上才会有效,而且该注解会被子类继承。

类型注解

在对元注解的说明中可知从 Java8 开始新增了类型注解,如果在注解 @Target 使用这种注解,表明该注解可以在对应的任何地方使用,如在 @Target 中指定 TYPE_PARAMETER 就可在自定义类型的声明处使用该注解,如在 @Target 中指定 TYPE_USE 就可在任何类型前添加该类之间,主要是方便 Java 开发者使用类型注解和相关插件(Checker Framework)来检查来在编译期检查运行时的异常。

下面分别定义指定 TYPE_PARAMETER 和 TYPE_USE 的注解,具体如下:

//1. TYPE_PARAMETER

然后,在下面的案例中使用这两个注解,具体如下:

/**

其实注解的语法比较简单,仅仅定义注解对实际开发是没有帮助的,觉得注解只有在运行时通过反射获取注解信息才是最重要的,注解与反射相关的内容会在以后的推文中学习,到此对注解的认识就结束了。

@value注解_Java系列之注解相关推荐

  1. java 注解默认值_Java系列之注解

    Java 注解(Annotation)又称之为 Java 标注.元数据,是 Java 1.5 之后加入的一种特殊语法,通过注解可以标注 Java 中的类.方法.属性.参数.包等,可以通过反射原理对这些 ...

  2. java中为什么要用注解_java中的注解,真的很重要,你理解了嘛?

    这篇文章开始讲解java中的注解,在平时的开发当中我相信你或多或少的接触过注解.比如你可能都见过@override,它代表的就是一个注解.但是,为了更加清晰的去介绍注解,我还是先给出一个例子,让你能够 ...

  3. java元注解_Java的元注解

    注解是一系列元数据,它利用元数据来解释.说明程序代码(即被注解的对象).注解的作用包括: 1.提供信息给编译器,编译器可以利用注解来探测错误和警告信息. 2.软件工具可以利用注解信息来生成代码.HTM ...

  4. @data注解的作用_Java中注解学习系列教程-2

    在上一篇文章中,我们讲解了:Java中注解的定义.JDK中内置注解.第三方注解. 本文是注解系列教程中的第二篇.来看看今天主要内容: ​ 1:注解的分类 2:元注解说明 3:自定义注解声明 一:注解的 ...

  5. @excel 注解_Java中注解学习系列教程-3

    本文是<Java中注解学习系列教程>第三篇文章 在前两篇中我们学习了注解的定义.JDK内置注解.注解分类及自定义注解的写法. 本文咱们将学习: ​ 1:自定义注解一些说明 2:自定义注解怎 ...

  6. java excel 注解_Java中注解学习系列教程-5 excel导出优化初级阶段

    在上一篇文章中,我们实现了使用自定义注解导出Excel的小案例.但是有问题的.我们发现,如果对象属性中包含了date类型或者使用了枚举类.这个时候就会出问题.我们来看看问题所在: 是不是已经看到了结果 ...

  7. java AST 表达式_java 编译时注解-AST 抽象语法树简介

    AST 语法入门 以前使用 Lombok 一直觉得是一个很棒的设计,可以同时兼顾注解的遍历和运行的性能. 运行时注解一直因为性能问题被人诟病. 自己尝试写过一些框架,但是耗费了比较多的精力,因为 AS ...

  8. Java中注解学习系列教程-2

    简介 在上一篇文章中,我们讲解了:Java中注解的定义.JDK中内置注解.第三方注解.本文是注解系列教程中的第二篇.来看看今天主要内容:1:注解的分类2:元注解说明3:自定义注解声明一:注解的分类注解 ...

  9. excel导出多重表头utils_Java中注解学习系列教程-4 使用自定义注解实现excel导出...

    本文是<Java中注解学习系列教程>第四篇文章也是小案例文章. 自定义注解小案例是:使用自定义注解实现excel导出. Excel导出分析: ​ 有表头.数据值.一般第一行是表头,从第二行 ...

最新文章

  1. Java的上溯、下溯
  2. powerdesigner逆向工程,从数据库导出PDM
  3. 我是如何阅读编程书的
  4. APACHE如何里一个站点绑定多个域名?用ServerAlias
  5. Golang 函数function
  6. Phonegap 极光推送api 服务器端推送代码
  7. 页面放在哪_思维制胜!PPT内容巨多的页面,这样排版更高大上
  8. 基于MHA+semi sync实现mysql数据库的高可用
  9. android中多线程与ui,Android UI线程和非UI线程
  10. 毕业五年同是程序员为什么差距这么大?他年薪百万,他月薪一万
  11. linuxliveu盘怎么用_linux mint 12 U盘(live usb)安装及体验
  12. python的第三方库是干什么用的-quot;别人造好的轮子”,python常用第三方库——python自动办公7...
  13. Python 操作快捷键
  14. SLAM--各种开源项目
  15. 智慧校园建设方案!高校统一数据中心解决方案
  16. 用Python制作圣诞树
  17. C程序设计 谭浩强 第九章
  18. 数据恢复软件如何恢复电脑删除的文件
  19. element-ui表格行不对齐
  20. 定时器的几种实现方式

热门文章

  1. 如何在log4j.properties文件中使用相对路径
  2. 数据库中主键和外键的设计原则
  3. android 静态广播无效,Android8.0静态广播接收静态注册无效,并实现全局网络监听...
  4. python 取一个字前的文本的_python删除某一行字符前面的内容
  5. Pytorch(三) --反向传播
  6. D-query SPOJ - DQUERY(求区间不同数的个数)(树状数组||线段树+离散)(主席树+在线)
  7. 24点游戏c语言源代码6,C语言解24点游戏程序
  8. 制作html5谭木记页面,北斗区域地理配套练习答案
  9. hot编码 字符one_用 PyTorch 实现基于字符的循环神经网络 | Linux 中国
  10. 深度学习之卷积神经网络(11)卷积层变种