注解(annotation)不是注释(comment);

注解,是一种元数据(metadata),可为我们在代码中添加信息提供了一种形式化的方法。注解在一定程度上实现了元数据和源代码文件的结合,而不是将元数据保存在外部文档中。

Java SE5 在 java.lang 中定义的三种基本注释:

  • @Override
  • @Deprecated
  • @SuppressWarnings

以及 4 中元注解:

  • @Target
  • @Retention
    • RetentionPolicy.SOURCE – 在编译阶段丢弃。这些注解在编译结束之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
    • RetentionPolicy.CLASS – 在类加载的时候丢弃。在字节码文件的处理中有用。注解默认使用这种方式。
    • RetentionPolicy.RUNTIME– 始终不会丢弃,运行期也保留该注解,因此可以使用反射机制读取该注解的信息。我们自定义的注解通常使用这种方式。
  • @Documented(将此注解包含在 doc 中)
  • @Inherited(允许子类继承父类中的注解)

1. 定义注解

可以看到,注解的定义看起来很像接口(@interface)的定义。事实上,与其他任何 java 接口一样,注解也会被编译成 .class 文件:

@Target(ElementType.METHOD)     // java.lang.annotation.ElementType/Target
@Retention(RetentionPolicy.RUNTIME) // java.lang.annotation.Retention/RententionPolicy;
public @interface Test {}

定义注解时,会需要一些元注解(meta-annotation),比如上例的 @Target 和 @Retention。

  • @Target 用来定义你的注解将应用在什么地方

    • 一个方法(@Target(ElementType.METHOD)),
    • 或是一个域(成员变量,@Target(ELEMENTTYPE.FIELD))
    • ElementType.CONSTRUCTOR
    • ElementType.LOCAL_VARIABLE
    • ElementType.PACKAGE
    • ElementType.TYPE
    • ElementType.PARAMETER
  • @Retention 用来定义该注解在哪一级别可用:
    • SOURCE:源代码中;
    • CLASS:类文件中;
    • RUNTIME:运行时;

在注解上,一般也会包含一些元素以表示某些值。当搜集分析处理注解时,程序或者工具可以利用这些值(没有元素的注解称为标记注解 marker annotation,也即仅起到标记作用,如上例的 @Test)。注解的元素看起来就像接口的方法,唯一的区别你可以为其指定默认值。

2. 注解的应用

如下为一个用来跟踪项目用例的注解。如果一个方法或一组方法实现了某个用例的需求,那么程序员可以为此方法加上注解。项目经理便可通过计算已经实现的用例,以掌握项目的进展。

// UseCase.java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface UseCase {public int id();public String description() default "no description";
}// PasswordUtils
public class PasswordUtils {@UseCase(id = 47, description = "password must contains at least one numeric")public boolean validatePassword(String password) {return password.matches("\\w*\\d\\w*");}@UseCase(id = 48)public String entryptPassword(String password) {return new StringBuilder(password).reverse().toString();}@UseCase(id = 49, description = "new password can't equal previously used ones")public boolean checkForNewPassword(List<String> prevPasswords, String password) {return prevPasswords.contains(password);}
}

Java 基础 —— 注解相关推荐

  1. Java基础-注解和反射

    Java基础-注解和反射 前言 对于注解,我主要还是在自定义APT还有运行时反射获取类来让自己能够构建出复用性更高的代码逻辑. 知识点1-注解: 注解的应用场景由元注解@Retention来进行指定, ...

  2. Java基础 --- 注解 Annotation

    Java基础 --- 注解 Annotation Java注解 Java自带的标准注解 自定义注解 Java注解 Java注解它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadat ...

  3. 夯实 Java 基础 - 注解

    夯实 Java 基础 - 注解 不知道大家有没有一种感觉,当你想要了解某个知识点的时候,就会发现好多技术类 APP 或者公众号在推一些关于这个知识点的文章.也许这就是大数据的作用,这也说明总有人比你抢 ...

  4. Java基础-注解机制详解

    文章目录 1. 注解基础 1.1 Java内置注解 1.1.1 内置注解 - @Override 1.1.2 内置注解 - @Deprecated 1.1.3 内置注解 - @SuppressWarn ...

  5. Java基础——注解

    一.概述 引自百度百科: 定义:注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法. ...

  6. java基础-注解Annotation原理和用法

    转载自 http://www.wolfbe.com/detail/201608/265.html 在很多java代码中都可以看到诸如@Override.@Deprecated.@SuppressWar ...

  7. java基础:注解的定义与使用

    java中的注解 1.该如何来理解注解? 乔布斯重新定义了手机,罗太君重新定义了傻逼.自然而然的就给罗太君贴上了傻逼的标签,不熟悉老罗的人,不知道他当教师,办博客,做手机,殊不知老罗还有"理 ...

  8. java基础- 注解和反射

    1. 注解(Annotation) 1. 什么是注解 Annotation是从JDK5.0开始引入的新技术. Annotation的作用 : 不是程序本身,可以对程序作出解释.(这一点和注释(comm ...

  9. Java基础--注解

    一直都想了解一下注解,下面是自己学到的一点东西. 1.分类 内置注解(@Override,@Deprecated,@SuppressWarnings),源码上很清楚的备注了各自的作用. 元注解(@Re ...

最新文章

  1. Linux 普通用户之间免密登陆
  2. ubuntu 创建github公钥
  3. 25 linux ndk 头文件_正点原子Linux第二十五章RTC实时时钟实验
  4. 原生Java代码拷贝目录
  5. 一个非常巧妙的 hashcode 算法 return h (length-1);
  6. c语言设计一个按时间片轮转法实现处理器调度的程序,设计一个按时间片轮转法实现处理器调度的程序...
  7. 大数据专家手把手教你打造实时数据湖
  8. 有限状态机的C++实现(2)-bayonet开源网络服务器框架
  9. 字典树从第i个构造HDU2846
  10. 基于CUDA的VTI介质有限差分正演模拟与逆时偏移及ADCIGs提取
  11. 16.What is pass in Python?
  12. 时间复杂度o(n^0.5)_算法基础1.1:算法复杂度计算(二)
  13. http三次握手_图文深入http三次握手核心问题【思维导图】
  14. 线性代数科学出版社课后练习题答案
  15. 南大计算机技术复试分数线,南大计算机复试分数线
  16. android开发中TabHost使用方法
  17. 胜为蓝牙适配器驱动_udc 324b蓝牙驱动下载|
  18. m4a怎么转换成mp3,m4a转mp3方法
  19. LaTeX中的特殊符号,数学公式符号的相关写法
  20. Microsoft Visual SourceSafe

热门文章

  1. Unity资源打包之Assetbundle
  2. Starling GodRay 效果实现
  3. cocos2d-x 通过JNI实现c/c++和Android的java层函数互调 .
  4. oracle中dual最多存多大_ORACLE中dual用法详解
  5. html5做在线音乐,html5实现在线响应式音乐播放器
  6. linux桌面版本安装MSDM,Parallel_s desktop怎么安装linux系统
  7. QThread Class
  8. Ecology 建模表单 数据库字段与页面字段对应关系显示
  9. python微信公众菜单_Python实现微信公众平台自定义菜单实例
  10. 数据挖掘:数据清洗——异常值处理