java注解

从java5开始,Java支持在源文件中嵌入补充信息,这类信息称为注解annotation。注解不会改变程序的动作,因此也不会改变程序的语义。

1.注解是基于接口的机制创建的。

public @interface AnnoDemo {
String strVal();
int setVal();
}
所有的注解只包含方法声明,没有方法实现;所有注解类型都自动扩展了Annotation接口。
创建好注解后可以使用声明注解了,可以用于类,方法,成员变量,参数,枚举常量,包括注解本身。

2.注解的保留策略

java定义了3种保留策略:SOURCE,CLASS,RUNTIME

1.使用SOURCE保留策略的注解,只在源文件中保留,在编译期间会被抛弃。

2.使用CLASS保留策略的注解,在编译后的calss中保留,在jvm运行期间会被抛弃。

3.使用RUNTIME保留策略的注解,在编译后的calss中保留,在jvm运行期间可以得到这些注解,它提供了永久的注解。

保留级别通过使用@Retention(RetentionPolicy.XXX)指定,
如果没有为注解指定保留级别,默认保留级别为RetentionPolicy.CLASS。

3.使用反射获取注解。

略。。。

4.注解的分类。

1.标记注解
标记注解不包含成员,唯一的目的是标记声明。
@Retention(RetentionPolicy.RUNTIME)
@interface AnnotationMark{}
2.单成员注解
单成员注解只有一个成员
3.内置注解
Java提供了许多专用内置注解,来自java.lang.annotation包的:
①Retention被设计为只能用于注解其它注解,指定保留策略。
②@Doucumented是标记接口,用于通知某个工具————注解将被文档化。只能注解其它注解。
③@Target 用于指定可以应用注解声明的类型,被设计为只能注解其它注解。
@Target只有一个参数,这个参数来自于ElementType枚举的常量,这个参数指定了将为其应用注解的声明的类型。
目标常量                  可应用注解的声明的类型
ANNOTATION_TYPE 另一个注解
CONSTRUCTOR 构造函数
FIELD 域变量
LOCAL_VARIABLE 局部变量
METHOD 方法
PACKAGE
PARAMETER 参数
TYPE 类,接口,枚举

例子:
@Target({ElementType.FIELD,ElementType.LOCAL_VARIABLE})
4.@Inherited 标记注解,只能用于另外一个注解声明,会导致超类的注解被子类继承,如果检查子类的注解不存在,就去超类检查如果存在并使用
@Inherited注解,就返回那种注解。
5.@Override 只能用于方法,确保超类的方法被真正的重写。
6.@Deprecated 过时
7.@SafeVarargs 指示没有发生与可变长度参数相关的不安全动作。
8.@SuppressWarnings 抑制警告

5.注解的使用限制

①注解不能继承另一个注解

②注解声明的所有方法不带有参数

③注解不能被泛型化








原文地址:https://www.cnblogs.com/pangdajin/p/9358958.html