- 说明
- 注解以@打头
- 注解作为一个标记,传递某种信息
- 一个注解就是一个类
- 哪里用到注解,就会在哪创建注解实例对象
- 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)自定义注解入门
Java注解(Annotation)
最新推荐文章于 2022-03-09 13:28:52 发布