Annontation是Java5开始引入的新特征。中文名称通常叫注解。java
它提供了一种安全的相似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。安全
更通俗的意思是为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,而且是供指定的工具或框架使用的。框架
Annontation像一种修饰符同样,应用于包、类型、构造方法、方法、成员变量、参数及本地变量的声明语句中。ide
@Override: 只能用在方法之上的,用来告诉别人这一个方法是改写父类的。
@Deprecated: 建议别人不要使用旧的API的时候用的,编译的时候会用产生警告信息,能够设定在程序里的全部的元素上。
@SuppressWarnings:这一个类型能够来暂时把一些警告信息消息关闭。函数
package annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; //做用范围 @Target(ElementType.TYPE) //RetentionPolicy.RUNTIME这种类型的Annotations将被JVM保留,因此他们能在运行时被JVM或其余使用反射 @Retention(RetentionPolicy.RUNTIME) //注解doc文档信息 @Documented public @interface Description { String value(); }
@interface是一个关键字,在设计annotations的时候必须把一 个类型定义为@interface,而不能用class或interface关键字。工具
@Target里面的ElementType是用来指定Annotation类型能够用在哪一些元素上测试
①TYPE(类型 TYPE(类型)是指能够用在Class,Interface,Enum和Annotation类型上)spa
②FIELD(应用在属性) .net
③METHOD(应用在方法)设计
④PARAMETER(应用在参数)
⑤CONSTRUCTOR(应用在构造函数)
⑥LOCAL_VARIABLE(应用在局部变量)
⑦ANNOTATION_TYPE(应用在注解)
⑧PACKAGE(应用在包)
注:若是Annotation类中没有加@Target注解,则默承认以做用在以上全部。
此注解意义就是指定注解的应用范围。
@Retention(保留)注解说明,这种类型的注解会被保留到哪一个阶段. 有三个值:
①RetentionPolicy.SOURCE —— 这种类型的Annotations只在源代码级别保留,编译时就会被忽略
②RetentionPolicy.CLASS —— 这种类型的Annotations编译时被保留,在class文件中存在,但JVM将会忽略
③RetentionPolicy.RUNTIME —— 这种类型的Annotations将被JVM保留,因此他们能在运行时被JVM或其余使用反射机制的代码所读取和使用
通常默认设置为: @Retention(RetentionPolicy.RUNTIME) ,这样在程序运行时候就能发现到这个注解。
@Documented 注解代表这个注解应该被 javadoc工具记录.
默认状况下,javadoc是不包括注解的,但若是声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 因此注解类型信息也会被包括在生成的文档中。
例如:
一、写注解类
@Target(ElementType.METHOD) // RetentionPolicy.RUNTIME —— 这种类型的Annotations将被JVM保留,因此他们能在运行时被JVM或其余使用反射 @Retention(RetentionPolicy.RUNTIME) // 注解doc文档信息 @Documented() public @interface UseDocumented { String Document(); }
二、写应用类
public class UseAnnotations { public static void main(String arg[]) { new UseAnnotations().doSomeRetention(); new UseAnnotations().doSomeDocumented(); } @UseDocumented(Document = "保留注解信息测试") public void doSomeRetention() { System.out.printf("测试注解类型 'Retention'"); } @UseDocumented(Document = "Hello document") public void doSomeDocumented() { System.out.printf("测试注解类型 'Documented'"); } }
三、生成doc,查看显示效果