`

第20章注解

 
阅读更多
1.注解也被称为元数据,它把元数据与源代码文件结合在一起,而不是保存在外部文档中。它可以用来完整地描述程序所需要的信息,而这个信息是无法用java来表达的。


2.定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {}
上面就是注解的定义,很像接口,注解也会编译成class文件。
在定义注解时,需要一些源注解@Target表示定义的注解用于什么地方(例如是方法还是域),@Retention定义注解在哪一级别可用,在源代码中(SOUIRCE),类文件(CLASS)还是运行时(RUNTIME)。

3.在定义注解时,一般还会定义一些元素。注解的元素看起来就像接口的方法,唯一区别是元素可以指定默认值。没有元素的注解称为标记注解,例如上面的Test。下面是定义了一些元素的注解:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase {
  public int id();
  public String description() default "no description";
}
使用方法:
public class PasswordUtils {
  @UseCase(id = 47, description =
  "Passwords must contain at least one numeric")
  public boolean validatePassword(String password) {
    return (password.matches("\\w*\\d\\w*"));
  }
  @UseCase(id = 48)
  public String encryptPassword(String password) {
   return new StringBuilder(password).reverse().toString();
  }
  @UseCase(id = 49, description =
  "New passwords can't equal previously used ones")
  public boolean checkForNewPassword(
    List<String> prevPasswords, String password) {
    return !prevPasswords.contains(password);
  }
}
注解元素使用时,表现为名-值对,并置于注解后面的括号内。如果元素被定义为value(),那么在使用时就可以直接赋值,不需要名称,例如:
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SQLString {
  int value() default 0;
  String name() default "";
  Constraints constraints() default @Constraints;
}
使用
public class Member {
  @SQLString(30) String firstName;
}


3.java提供了3种标准注解,以及四种元注解

元注解专门负责注解其他的注解,如果想应用于多个地方,可以使用逗号隔开声明。如果想应用于所有,可以省略改声明:
@Target表示注解用于什么地方
@Retention表示需要在什么级别保存改注解
@Documented将注解包含在JavaDoc中
@Inherited允许子类继承父类中的注解

3.如果没有用来读取注解的工具,那么注解也不会比注释更有用,下面是一个提起注解的例子:

public class UseCaseTracker {
public static void trackUseCases(List<Integer> useCases, Class<?> cl) {
for (Method m : cl.getDeclaredMethods()) {
UseCase uc = m.getAnnotation(UseCase.class);
if (uc != null) {
System.out.println("Found Use Case:" + uc.id() + " "
+ uc.description());
useCases.remove(new Integer(uc.id()));
}
}
for (int i : useCases) {
System.out.println("Warning: Missing use case-" + i);
}
}

public static void main(String[] args) {
List<Integer> useCases = new ArrayList<Integer>();
Collections.addAll(useCases, 47, 48, 49, 50);
trackUseCases(useCases, PasswordUtils.class);
}
}

4.注解元素允许使用的类型

(1)所有基本类型
(2)String
(3)Class
(4)enum
(5)Annotation
(6)还可以是注解

不能使用其他类型,否则编译器会出错

5.元素要么有默认值,要么在使用时给出确定的值。不能没有值

6.注解不支持继承,不能使用extends来继承一个注解@interface
分享到:
评论

相关推荐

    编程思想下篇

    由于上传文件大小限制该资源为上下篇 本资源为下篇 第1章 对象导论 1.1 抽象过程 1.2 每个对象都有一个接口 1.3 每个对象都提供服务 1.4 被隐藏的具体实现 ...第20章 注解 第21章 并发 第22章 图形化用户界面

    java语言程序设计基础篇第十版第十三章练习标准答案.pdf

    Java 语言程序设计基础篇第十三章练习标准答案 本资源提供了 Java 语言程序设计基础篇第十三章的练习标准答案,包括三个练习题的解决方案。这些练习题涵盖了 Java 语言的多个方面,例如面向对象编程、泛型、集合...

    Thinking in java4(中文高清版)-java的'圣经'

    类型信息 第15章 泛型 第16章 数组 第17章 容器深入研究 第18章 Java I/O系统 第19章 枚举类型 第20章 注解 第21章 并发 第22章 图形化用户界面 附录A 补充材料 可下载的补充材料 Thinking in C:Java的基础 Java...

    精通CSS+DIV源码 第二十章

    在本章“精通CSS+DIV源码 第二十章”中,我们将深入探讨使用CSS(层叠样式表)和DIV(定义文档布局的HTML元素)来构建网页布局的高级技巧和最佳实践。CSS与DIV的结合是现代网页设计的核心,允许开发者以更灵活、可...

    Java编程思想笔记(全)

    第二十章讲解了Java中的注解。注解是一种元数据,用于向编译器或运行时环境提供额外的信息。本章介绍了如何定义注解、注解处理器以及如何使用@Retention、@Target等元注解。注解在开发框架、代码生成等方面有着广泛...

    Thinking in Java 第四版 第2章到第17章答案

    第二章至第十七章涵盖了从基础语法到高级特性的大量内容。以下是这些章节中的关键知识点: 1. **第二章:对象与类** - 这一章讲解了面向对象编程的基础,包括类的定义、对象的创建、封装、继承和多态等概念。了解...

    P2P网络技术原理与C++开发案例 源代码和第五章电子书 Peercast(王浩聪注释版)

    第8章 P2P文件共享系统开发实例二——BT的设计与实现 230 8.1 BitTorrent系统概述 230 8.2 BitTorrent系统原理 230 8.2.1 BitTorrent协议原理 231 8.2.2 BitTorrent Tracker服务器原理 234 8.3 ...

    代码大全第二版 中文版(1-20章)

    - 第二十章“专业主义”呼吁程序员保持专业精神,不断提升技能,追求卓越。 这些章节覆盖了从编程基础到高级技术的广泛内容,适用于B、C、Java等语言的程序员。通过深入学习并实践书中的建议,可以显著提高代码...

    Java语言程序设计(梁勇)第21-30章全部完整习题答案

    第25章到第28章可能涵盖了反射、注解、网络编程和数据库连接等内容。反射允许在运行时检查类和对象,创建动态类型的行为。注解提供了一种元数据的方式来标记代码,增强编译器或运行时环境的功能。网络编程涉及Socket...

    《离散数学教程》作者: 耿素云,屈婉玲,王捍贫 出版时间:2004年

    图的矩阵表示第十一章平面图第十二章图的着色第十三章支配集、覆盖集、...第二十章组存在性定理第二十一章基本的计数公式第二十二章组合计数方法第二十三章组合计数定理第二十四章组合设计与编码第二十五章组合最优化...

    Struts2权威指南源代码第20章源码

    第20章的源代码通常会涵盖Struts2的核心概念、最佳实践以及特定功能的实现。这一章可能涉及的主题包括: 1. **Action类与结果映射**:在Struts2中,Action类是业务逻辑的载体,它处理用户请求并返回相应的结果。...

    Revit Structure 2011 中文用户手册

    第 20 章屋顶 第 21 章楼板 第 22 章洞口 第 23 章模型文字 第 24 章模型线 第 25 章复合结构 第 26 章斜表面 第 27 章统一格式的部件代码 第 28 章楼梯 第 29 章坡道 第 30 章扶手 第 31 章幕墙图元 第 32 章设计...

    鲁棒与最优控制

    本书阐述了当代鲁棒与最优控制的主要和基本的内容,其中包含了作者对该理论作出的重要贡献。是学控制的必备的工具书。 目录 ...第二十章 固定结构控制器 第二十一章 离散时间控制 参考文献 索引

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 20. 集合框架涉及到的API.avi

    计算机后端-Java-Java核心基础-第23章 枚举类与注解 20. 集合框架涉及到的API.avi

    spring应用开发完全手册第20章

    总的来说,Spring应用开发完全手册的第20章将带你深入理解如何利用Spring框架构建一个高效、安全、可扩展的企业门户网站。通过学习这一章,你不仅能掌握Spring MVC的核心概念,还能了解到企业级应用开发中的最佳实践...

    第20章 DOM进阶1

    【第20章 DOM进阶1】主要涵盖了DOM(Document Object Model)的深入学习,包括DOM类型、DOM扩展以及DOM操作。DOM是一种编程接口,它允许程序和脚本动态更新、添加、删除和改变HTML或XML文档的结构、内容和样式。 ...

    Java Web开发实战宝典 第20-24章

    ### 第20章:Servlet入门 - **Servlet概念**:讲解了Servlet是Java EE平台中用于处理HTTP请求的服务端组件。 - **Servlet生命周期**:包括初始化、服务、销毁三个阶段。 - **`web.xml`配置**:如何在部署描述符中...

    accp5.0JavaScript第五章上机答案

    本“accp5.0JavaScript第五章上机答案”应当包含了上述知识点的具体实践和解答,帮助学员巩固理论知识,提高动手能力。通过解决上机题目,学员能够更好地理解和运用JavaScript,为后续的Web开发打下坚实基础。

    C# 经典案例源码7(82例)详细注释

    第20章可能涵盖文件和流操作。在C#中,文件操作是处理磁盘上数据的关键部分,而流则允许程序读写数据,无论是本地文件还是网络资源。学习者会学习如何打开、读取、写入和关闭文件,以及如何使用不同的流类型,如文本...

Global site tag (gtag.js) - Google Analytics