-
说明
- 注解以@打头
- 注解作为一个标记,传递某种信息
- 一个注解就是一个类
- 哪里用到注解,就会在哪创建注解实例对象
- javac编译器或其他程序通过反射获取元素的注解
-
分类
-
JDK内置系统注解
-
@Deprecated
- 标记某个元素过时
-
@Override
- 标记某个方法覆盖了父类方法
-
@SafeVarargs
参考http://book.51cto.com/art/201205/339154.htm- 抑制编译器警告
- 此注解只能用在参数长度可变的方法或构造方法上
- 且方法必须声明为static或final,否则会出现编译错误
-
@SuppressWarnings
- 提示编译器不要提示警告
-
@Deprecated
-
元注解
-
@Documented
-
说明
-
Documented 注解表明这个注解应该被 javadoc工具记录
默认情况下,javadoc是不包括注解的 -
如果声明注解时指定了@Documented,则它会被 javadoc 之类的工具处理
-
声明了此元注解的注解在使用时,会被保留在Doc文档中
@Test_Retention (doTestRetention="保留注解信息测试")
public void doSomeTestRetention() {
System.out.printf("测试注解类型 'Retention'");
}
@Test_Documented(doTestDocument="Hello document")
public void doSomeTestDocumented() {
System.out.printf("测试注解类型 'Documented'");
}
-
声明了此元注解的注解在使用时,会被保留在Doc文档中
-
Documented 注解表明这个注解应该被 javadoc工具记录
-
说明
-
@Inherited
-
说明
- 此注解用来标注自定义注解
-
此注解起到的作用:允许一个子类继承其父类上的某自定义注解
- 某自定义注解上标注有@Inherited
-
继承有效情况
- 从某个子类上获取注解
-
某个子类不覆盖父类加了注解的成员
- 在子类中能获取到被继承成员上的注解
-
继承无效情况
-
子类覆盖了父类加了注解的成员
- 在子类中获取不到成员上的注解
-
子类覆盖了父类加了注解的成员
-
示例
http://blog.csdn.net/snow_crazy/article/details/39381695
-
说明
-
@Retention
-
说明
-
标记注解存在的生命周期
- Java源文件
- class文件
- 内存中的字节码
- 默认值在class文件阶段
- 取值枚举RetentionPolicy
-
标记注解存在的生命周期
-
取值
-
CLASS
-
这种类型的Annotations编译时被保留
在class文件中存在,但JVM将会忽略
-
这种类型的Annotations编译时被保留
-
RUNTIME
-
这种类型的Annotations将被JVM保留
所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用
-
这种类型的Annotations将被JVM保留
-
SOURCE
-
这种类型的Annotations只在源代码级别保留
编译时就会被忽略
-
这种类型的Annotations只在源代码级别保留
-
CLASS
-
说明
-
@Target
-
说明
- 用于说明当前注解要作用在哪个元素上
- 取值枚举ElementType
-
取值
- ANNOTATION_TYPE :注解类型声明
- CONSTRUCTOR :构造方法声明
- FIELD :字段声明(包括枚举常量)
- LOCAL_VARIABLE :局部变量声明
- METHOD :方法声明
- PACKAGE :包声明
- PARAMETER :参数声明
- TYPE :类、接口(包括注解类型) 或enum声明
-
说明
-
@Documented
-
自定义注解
-
说明
- 注解之所以强大,因为它有属性
- 注解和接口很类似
-
使用注解时,()里有{}
- 注解的属性是数组类型
-
使用注解时,省略了"属性名="
- 注解只有一个属性
- 属性名为value
-
声明
- public @interface注解名字
-
属性
-
声明
- 返回类型 属性名();
- 返回类型 属性名() default xxx;
-
返回类型
- 所有基本数据类型(int,float,boolean,byte,double,char,long,short)
- String类型
- Class类型
- enum类型
- Annotation类型
-
以上所有类型的一维数组
-
数组元素个数=1
- 使用时,{}可省略
-
数组元素个数>1
- 使用时,{}不可省略
-
数组元素个数=1
-
属性名
-
value
-
当注解只有value一个属性时
- 使用时,"value="可省略
-
当注解有多个属性时
-
除value属性,其他属性都有default
-
YES
- 使用时,"value="可省略
-
NO
- 使用时,"value="不可省略
-
YES
-
除value属性,其他属性都有default
-
当注解只有value一个属性时
-
其他合法属性名
- 使用时,属性名=属性类型的值
-
value
-
default
-
说明
- 为属性设置缺省值
- 使用注解时,可不设置此属性
-
说明
-
声明
-
说明
-
JDK内置系统注解
-
作用范围 (ElementType)
-
TYPE
Class, interface (including annotation type), or enum declaration -
FIELD
Field declaration (includes enum constants) -
METHOD
Method declaration -
PARAMETER
Formal parameter declaration -
CONSTRUCTOR
Constructor declaration -
LOCAL_VARIABLE
Local variable declaration -
ANNOTATION_TYPE
Annotation type declaration -
PACKAGE
Package declaration -
TYPE_PARAMETER
Type parameter declaration (since 1.8) -
TYPE_USE
Use of a type (since 1.8)
-
TYPE
-
综合示例
-
定义注解
-
使用注解
-
定义注解
-
参考
-
深入理解Java:注解(Annotation)自定义注解入门
http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html -
关于java 注解中元注解Inherited的使用详解
http://blog.csdn.net/snow_crazy/article/details/39381695 -
Java注解之Retention、Documented、Inherited介绍
http://blog.csdn.net/aayygg1234/article/details/45822303
-
深入理解Java:注解(Annotation)自定义注解入门
相关文章: