第二十三章 注解

定义在 java.lang 包中的5种标准注解:

  • @Override:表示当前的方法定义将覆盖基类的方法。如果你不小心拼写错误,或者方法签名被错误拼写的时候,编译器就会发出错误提示。
  • @Deprecated:如果使用该注解的元素被调用,编译器就会发出警告信息。
  • @SuppressWarnings:关闭不当的编译器警告信息。
  • @SafeVarargs:在 Java 7 中加入用于禁止对具有泛型varargs参数的方法或构造函数的调用方发出警告。
  • @FunctionalInterface:Java 8 中加入用于表示类型声明为函数式接口

基本语法

从语法的角度上看,注解的使用方式和修饰符的使用方式一致。

定义注解

@Target 定义你的注解可以应用在哪里(例如是方法还是字段)。@Retention 定义了注解在哪里可用,在源代码中(SOURCE),class文件(CLASS)中或者是在运行时(RUNTIME)。

不包含任何元素的注解称为标记注解(marker annotation)。

元注解

Java 语言中目前有 5 种标准注解,以及 5 种元注解。

元注解用于注解其他的注解:

注解 解释
@Target 表示注解可以用于哪些地方。可能的ElementType参数包括:CONSTRUCTOR:构造器的声明FIELD:字段声明(包括 enum 实例)LOCAL_VARIABLE:局部变量声明METHOD:方法声明PACKAGE:包声明PARAMETER:参数声明TYPE:类、接口(包括注解类型)或者 enum 声明
@Retention 表示注解信息保存的时长。可选的RetentionPolicy参数包括:SOURCE:注解将被编译器丢弃CLASS:注解在 class 文件中可用,但是会被 VM 丢弃。RUNTIME:VM 将在运行期也保留注解,因此可以通过反射机制读取注解的信息。
@Documented 将此注解保存在 Javadoc 中
@Interited 允许子类继承父类的注解
@Repeatable 允许一个注解可以被使用一次或者多次(Java 8)。

编写注解处理器

使用注解中一个很重要的部分就是,创建与使用注解处理器。Java 拓展了反射机制的 API 用于帮助你创造这类工具。同时他还提供了 javac 编译器钩子在编译时使用注解。

注解元素

注解元素可用的类型如下所示:

  • 所有基本类型(int、float、boolean等)
  • String
  • Class
  • enum
  • Annotation
  • 以上类型的数组

默认值限制

元素要么有默认值,要么就在使用注解时提供元素的值。

这里有另外一个限制:任何非基本类型的元素, 无论是在源代码声明时还是在注解接口中定义默认值时,都不能使用 null 作为其值。

生成外部文件

@Target 注解中指定的每一个 ElementType 就是一个约束,它告诉编译器,这个自定义的注解只能用于指定的类型。你可以指定 enum ElementType 中的一个值,或者以逗号分割的形式指定多个值。如果想要将注解应用于所有的 ElementType,那么可以省去 @Target 注解,但是这并不常见。

快捷方式特性:如果你在注解中定义了名为 value 的元素,并且在使用该注解时,value 为唯一一个需要赋值的元素,你就不需要使用名—值对的语法,你只需要在括号中给出 value 元素的值即可。这可以应用于任何合法类型的元素。这也限制了你必须将元素命名为 value.

替代方案

在 Java 8,在使用多个注解的时候,你可以重复使用同一个注解。

注解不支持继承

转载于:https://www.cnblogs.com/huangwenjie/p/11604568.html

20190928 On Java8 第二十三章 注解相关推荐

  1. 数字图像处理:第二十三章 基于内容的图象与视频检索

    第二十三章基于内容的图象与视频检索 目录 1.    引言 2.    基于内容检索的图象特征 3.    基于内容的视频标注与检索 作业 1. 引言 随着社会的信息化发展日益深入,互连网日益普及,越 ...

  2. 第二十三章 SQL函数 CAST(二)

    文章目录 第二十三章 SQL函数 CAST(二) 转换位值 示例 第二十三章 SQL函数 CAST(二) 转换位值 可以将expr值转换为BIT以返回0或1. 如果expr为1或任何其他非零数值,则返 ...

  3. 【正点原子MP157连载】第二十三章 Linux设备树-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  4. 【正点原子Linux连载】第二十三章 音频应用编程-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1

    第二十三章 音频应用编程 ALPHA I.MX6U开发板支持音频,板上搭载了音频编解码芯片WM8960,支持播放以及录音功能! 本章我们来学习Linux下的音频应用编程,音频应用编程相比于前面几个章节 ...

  5. 《快速掌握PyQt5》第二十三章 主窗口QMainWindow

    第二十三章 主窗口QMainWindow 23.1 记事本应用 23.3 程序启动画面QSplashScreen 23.2 小结 <快速掌握PyQt5>专栏已整理成书出版,书名为<P ...

  6. 第二十三章 类关键字 - Language

    文章目录 第二十三章 类关键字 - Language 用法 详解 对子类的影响 默认 第二十三章 类关键字 - Language 指定用于实现此类方法的默认语言. 用法 若要指定用于实现此类中的方法的 ...

  7. 【信息系统项目管理师】第二十三章 信息系统综合测试与管理(考点汇总篇)

    [信息系统项目管理师]第二十三章 信息系统综合测试与管理(考点汇总篇) 考点分析与预测 本章内容属于第三版教材新增的内容,总共80多页,但在上午考试中只考2分.一般来说还会在案例分析中涉及一个关于测试 ...

  8. 系统集成项目管理工程师(软考中级)—— 第二十三章 风险管理 笔记分享

    前言 现在分享一些笔记给大家,希望能够帮助大家并顺利通过软考. 幕布地址:第二十三章 风险管理 - 幕布 概述 大数据 ITO 4W1H 风险 概念 风险是一种不确定的事件或条件,一旦发生,就会产生积 ...

  9. 第二十三章 使用 %Status 值

    文章目录 第二十三章 使用 %Status 值 使用状态值的基础知识 示例 状态值中报告的多个错误 返回状态值 第二十三章 使用 %Status 值 许多类使用 %Status 数据类型类来表示状态信 ...

最新文章

  1. 时间立即同步命令_Redis复制:主从同步
  2. vue 定义全局函数
  3. 汇编环境搭建(vs2010(2012)+masm32)
  4. JZOJ 2308. 【中山市选2011】聚会
  5. SQL Server语句大全(增删改查数据、创建表、删除表、修改表)
  6. 让人难以置信的HTML5和JavaScript实验
  7. 数据库实例:mysql与mongo结合用户登录
  8. Delphi XE10百集视频教程计划
  9. 虚拟机win7装oracle,大神教你win7系统安装Oracle VM VirtualBox虚拟机的处理教程
  10. 自动化运维工具puppet学习笔记之基础篇
  11. win10如何合并硬盘分区
  12. 专业精神-希波克拉底的誓言(转载)
  13. 本站最全-unity常用API大全(万字详解),不信你不收藏
  14. 市场热度持续提升!4D成像雷达进入「细分场景争夺战」
  15. Python爬虫之简单爬虫之爬取英雄联盟官网的英雄的皮肤
  16. 解决:java.lang.IllegalArgumentException: Can not set java.lang.Boolean field
  17. 时间--cd //lastyear
  18. 快递物流查询,教你自动查询并识别所有快递是否签收、退回
  19. Microsoft Teams中的访客(三)--访客的管控
  20. 毕业设计Java超市积分管理系统源码资料+项目视频说明+项目截图

热门文章

  1. python语言输入中文_selenium+python 语言编写问题,在执行时无法输入中文用户名...
  2. LeetCode-外观数列-纯C递归
  3. 图像局部特征(四)--FAST-ER角点检测子
  4. Pan JiaPu/ A real-time QRS detection algorithm
  5. vue-router学习第一天
  6. 满二叉树与完全二叉树入门
  7. JS学习--Math对象
  8. 让程序员过年回家包压岁钱不心痛的好办法|v3.11.0上线!
  9. 百度地图出现网格,不显示地图
  10. Lucene全文检索(一)