JAVA中的注解java
四种元注解:jvm
元注解:注解的注解,即java为注解开发特准备的注解。函数
①: @Target : 表示该注解用于什么地方工具
@Target:注解的做用目标spa
@Target(ElementType.TYPE) //接口、类、枚举、注解.net
@Target(ElementType.FIELD) //字段、枚举的常量继承
@Target(ElementType.METHOD) //方法接口
@Target(ElementType.PARAMETER) //方法参数开发
@Target(ElementType.CONSTRUCTOR) //构造函数文档
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}
public enum ElementType {
/** 类,接口(包括注解类型)或enum声明 */
TYPE,
/** 域声明(包括 enum 实例) */
FIELD,
/** 方法声明 */
METHOD,
/** 参数声明 */
PARAMETER,
/** 构造器声明 */
CONSTRUCTOR,
/** 局部变量声明 */
LOCAL_VARIABLE,
/** Annotation type declaration */
ANNOTATION_TYPE,
/** 包声明 */
PACKAGE,
/**
* 类型参数声明
* @since 1.8
*/
TYPE_PARAMETER,
/**
* 类型的使用
* @since 1.8
*/
TYPE_USE
}
②.@Retention:: 表示该注解能够保存的范围
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
RetentionPolicy value();
}
public enum RetentionPolicy {
/**
* 源代码:即此注解只能保存在源代码中
* 当编译时,会被丢弃
*/
SOURCE,
/**
* class文件:即此注解能够在class文件中保留
* 但会被jvm丢弃
*/
CLASS,
/**
* 运行期:即此注解能够在运行时保留
* 能够经过反、反射得到
*/
RUNTIME
}
注解@Retention能够用来修饰注解,是注解的注解,称为元注解。
Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,
这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy有3个值:CLASS RUNTIME SOURCE
用@Retention(RetentionPolicy.CLASS)修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候;
用@Retention(RetentionPolicy.SOURCE )修饰的注解,表示注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中;
用@Retention(RetentionPolicy.RUNTIME )修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时,
因此他们能够用反射的方式读取。RetentionPolicy.RUNTIME 能够让你从JVM中读取Annotation注解的信息,以便在分析程序的时候使用.
③ @Documented :: 即拥有这个注解的元素能够被javadoc此类的工具文档化。它表明着此注解会被javadoc工具提取成文档。在doc文档中的内容会由于此注解的信息内容不一样而不一样。至关与@return,@param 等。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}
④ @Inherited : 容许子类继承父类中的注解。即拥有此注解的元素其子类能够继承父类的注解。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Inherited {
}
@Interface
@interface 不是interface,是注解类
是jdk1.5以后加入的,java没有给它新的关键字,因此就用@interface 这么个东西表示了
这个注解类,就是定义一个可用的注解