java注解

Posted 落霞与孤鹜齐飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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})
[email protected] 标记注解,只能用于另外一个注解声明,会导致超类的注解被子类继承,如果检查子类的注解不存在,就去超类检查如果存在并使用
@Inherited注解,就返回那种注解。
[email protected] 只能用于方法,确保超类的方法被真正的重写。
[email protected] 过时
[email protected] 指示没有发生与可变长度参数相关的不安全动作。
[email protected] 抑制警告

5.注解的使用限制

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

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

③注解不能被泛型化


































以上是关于java注解的主要内容,如果未能解决你的问题,请参考以下文章

JAXB的@XmlElement注解

java代码在片段活动中不起作用

Android APT注解处理器 ( 根据注解生成 Java 代码 )

java 代码片段【JAVA】

# Java 常用代码片段

# Java 常用代码片段