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)与程序元素( ...
随机推荐
- PHP—通过HTML网页请求,PHP页面显示源码不能解析
对于初学者来说,可能会碰到这样一个问题,那就是我们通过html网页,在表单的action中填入后台处理的php文件后,虽然可以跳转到php网页上,但是却显示一大堆php源码而不是处理请求.像这样: ...
- 14Spring通过注解配置Bean(2)
下面将对13Spring通过注解配置Bean(1)的中Repository.Service.Controller通过注解方式来建立关联. <context:component-scan>元 ...
- hdu 4091 数学思维题贪心
/* 参看博客地址:http://blog.csdn.net/oceanlight/article/details/7857713 重点是取完最优的后剩余的rest=n%lcm+lcm;中性价比小的数 ...
- [bzoj3513][MUTC2013]idiots_FFT
idiots bzoj-3513 MUTC-2013 题目大意:给定$n$根木棍,问随机选择三根能构成三角形的概率. 注释:$1\le n\le 3\cdot 10^5$,$1\le a_i\le 1 ...
- docker容器-快速部署Jenkins
1.在本地虚拟机环境.安装CentOS 7,并安装docker容器 2.在docker容器中执行 docker pull jenkinsci/blueocean 3.查看已经下载的Jenkins镜像 ...
- Oracle数据库导入导出简单备份
oracle数据库简单备份 方法一: 1.导出 exp c##xmq/pwda@orcl owner=c##xmq file=C:/expdb.dmp buffer=8000 2.导入 2.1.删除原 ...
- cache and database
This article referenced from http://coolshell.cn/articles/17416.html We all know that high concurren ...
- iphone的ibooks如何导入pdf?
使用QQ把pdf文档从电脑上发到手机上,使用手机的QQ打开文档,在手机QQ上,用其他应用打开文档,选择‘拷贝’到ibooks
- 踩坑录-mysql不允许远程连接(错误码:1130) Host'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server“
每次搭建mysql环境都会遇见同样的问题,在此分享一下踩坑笔录. 一.问题描述 安装成功后,本地直接链接远程mysql,默认为不允许远程访问,则客户端提示1130 - Host'xxx.xxx.xxx ...
- Centos7 samba 匿名共享 简单config
安装Samba yum install samba samba-client samba-common -y 备份原始的Samba配置文件: mv /etc/samba/smb.conf /etc/s ...