Java 基础 —— 注解
注解(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 基础 —— 注解的更多相关文章
- Java基础—注解(转载)
概念 注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法.局部变量.方法参数等的前面 ...
- java基础-注解Annotation原理和用法
在很多java代码中都可以看到诸如@Override.@Deprecated.@SuppressWarnings这样的字符,这些就是注解Annotation.注解最早在jdk5中被引入,现在已经成为j ...
- Java基础—注解的使用
1.注解的概述: 注解是用来替代配置文件的!你回忆一下,我们以前总是要写一些配置文件,例如web.xml你还记得么?里面要写<servlet>和<servlet-mapping> ...
- Java基础——注解
一.概述 引自百度百科: 定义:注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性,与类.接口.枚举是在同一个层次.它可以声明在包.类.字段.方法. ...
- Java基础--注解Annotation
Annotation是给类,方法或域上加的一种特殊的标记,可以通过反射取到注解的类型和值,从而完成某种特定的操作. 定义注解需要使用元注解,元注解有@Retention和@Target //@Rete ...
- java基础—注解annotation
一.认识注解 注解(Annotation)很重要,未来的开发模式都是基于注解的,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解的,现在的Struts ...
- Java基础--注解、反射
一.注解(Annotation) 1.什么是注解? 从JDK5开始,Java增加了Annotation(注解),Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行 ...
- Java 基础 —— 注解 Annotation
简介 Annotation 是从 JDK 5.0 引入的. 注解使得我们可以以编译器验证的格式存储程序的额外信息.注解可以生成描述符文件,甚至是新的类定义,并且有助于减轻编写"样板" ...
- Java基础 - 注解详解
What - 什么是注解? Annontation是Java5开始引入的新特征,中文名称叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素( ...
随机推荐
- Java多线程基础(面试向)
----?为什么要用到多线程 CPU是以时间片的方式为进程分配CUP处理时间的,如果当一个进程同时要完成几件事的时候,如当从网上下载文件的时候,需要一边下载一边显示进度而且还要一边保存,如果按照单线程 ...
- log4j动态文件名
在项目中,对log的输出有多种多样的要求,下面具体分析一下动态log文件名输出的. 一,按照用户ID来生成log,这种情况,可以根据每个用户ID来动态生成logger. 代码如下: import or ...
- assert.notEqual()
浅测试,使用不等于比较运算符(!=)比较. const assert = require('assert'); assert.notEqual(1, 2); // OK assert.notEqual ...
- Python之面向对象反射
Python之面向对象反射 isinstance(obj,cls)检查是否obj是否是类 cls 的对象 1 class Foo(object): 2 pass 3 4 obj = Foo() 5 6 ...
- UVa 12333 - Revenge of Fibonacci manweifc(模拟加法竖式 & 字典树)
题意: 给定n个(n<=40)数字, 求100000个以内有没有前面n个数字符合给定的数字的fibonacci项, 如果有, 给出最小的fibonacci项, 如果没有, 输出-1. 分析: 可 ...
- 九度oj 题目1205:N阶楼梯上楼问题
题目1205:N阶楼梯上楼问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:4990 解决:2039 题目描述: N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式.(要求采用 ...
- HDU 4968 (水dp 其他?)
+;],dp1[][],dp2[][]; map< memset(GPA,, ;i<=;i++) hash[i]=; ;i<=;i++) hash[i]=; ...
- HDU 3664 (水地推)
http://acm.hdu.edu.cn/showproblem.php?pid=3664 题意:给出数字n,问n的所有的排列中满足Ai>i 数字恰好为 k的排列的个数. sl : dp dp ...
- 子集和的目标值(codevs 1692)
题目描述 Description 给定n个整数in和目标值T,求某一非空子集使 子集的元素的和 与 目标值之差 的绝对值最小,元素可重复 输入描述 Input Description 第一行为整数n ...
- CSU - 1115 最短的名字(字典树模板题)
Description 在一个奇怪的村子中,很多人的名字都很长,比如aaaaa, bbb and abababab. 名字这么长,叫全名显然起来很不方便.所以村民之间一般只叫名字的前缀.比如叫'aaa ...