什么是注解:
注解类型属于一种Java类型,它用@interface关键字来声明。
注解类中的类体为空时,被称为“标示性注解(Marked Annotation)”
public @interface Test{}
还可以定义一些成员,下面就是有一个名为value的成员和一个Class类型的成员默认值为void.class
public @interface Test{
String value() default "";
Class type default void.class;
}
成员的可选类型包括:String(字符串类型)、Class(类类型)、primitive(基本类型)、enumerated(枚举类型)和annotation(注解类型),还有这些类型的数组类型,eg:String[]、Class[]
java中元注解(Jdk内置的注解类型)java.lang.annotation包中
主要有四个: @Retention @Target @Document @Inherited
@Target:注解的作用目标,可选值是从java.lang.annotation.ElementType枚举类的枚举常量来表示
@Target({ElementType.TYPE}) //适用于接口、类、枚举、注解
@Target({ElementType.FIELD}) //适用于字段、枚举的常量
@Target({ElementType.METHOD}) //适用于方法
@Target({ElementType.PARAMETER}) //适用于方法参数
@Target({ElementType.CONSTRUCTOR}) //适用于构造函数
@Target({ElementType.LOCAL_VARIABLE}) //适用于局部变量
@Target({ElementType.ANNOTATION_TYPE}) //适用于注解
@Target({ElementType.PACKAGE}) //适用于包
@Retention:注解的保留位置
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Inherited:说明子类可以继承父类中的该注解
@Document:说明该注解将被包含在javadoc中
使用注解机制的步骤:
1、自定义一个annotation注解类型
2、在类的源码中中庸注解类型
3、在程序中运用反射机制读取类的注解信息
《java面向对象编程》