Java注解(Annotation)
2017-08-16 16:25
561 查看
说明
注解以@打头
注解作为一个标记,传递某种信息
一个注解就是一个类
哪里用到注解,就会在哪创建注解实例对象
javac编译器或其他程序通过反射获取元素的注解
分类
JDK内置系统注解
@Deprecated
标记某个元素过时
@Override
标记某个方法覆盖了父类方法
@SafeVarargs
参考http://book.51cto.com/art/201205/339154.htm
抑制编译器警告
此注解只能用在参数长度可变的方法或构造方法上
且方法必须声明为static或final,否则会出现编译错误
@SuppressWarnings
提示编译器不要提示警告
元注解
@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'");
}
@Inherited
说明
此注解用来标注自定义注解
此注解起到的作用:允许一个子类继承其父类上的某自定义注解
某自定义注解上标注有@Inherited
继承有效情况
从某个子类上获取注解
某个子类不覆盖父类加了注解的成员
在子类中能获取到被继承成员上的注解
继承无效情况
子类覆盖了父类加了注解的成员
在子类中获取不到成员上的注解
示例
http://blog.csdn.net/snow_crazy/article/details/39381695
@Retention
说明
标记注解存在的生命周期
Java源文件
class文件
内存中的字节码
默认值在class文件阶段
取值枚举RetentionPolicy
取值
CLASS
这种类型的Annotations编译时被保留
在class文件中存在,但JVM将会忽略
RUNTIME
这种类型的Annotations将被JVM保留
所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用
SOURCE
这种类型的Annotations只在源代码级别保留
编译时就会被忽略
@Target
说明
用于说明当前注解要作用在哪个元素上
取值枚举ElementType
取值
ANNOTATION_TYPE :注解类型声明
CONSTRUCTOR :构造方法声明
FIELD :字段声明(包括枚举常量)
LOCAL_VARIABLE :局部变量声明
METHOD :方法声明
PACKAGE :包声明
PARAMETER :参数声明
TYPE :类、接口(包括注解类型) 或enum声明
自定义注解
说明
注解之所以强大,因为它有属性
注解和接口很类似
使用注解时,()里有{}
注解的属性是数组类型
使用注解时,省略了"属性名="
注解只有一个属性
属性名为value
声明
public @interface注解名字
属性
声明
返回类型 属性名();
返回类型 属性名() default xxx;
返回类型
所有基本数据类型(int,float,boolean,byte,double,char,long,short)
String类型
Class类型
enum类型
Annotation类型
以上所有类型的一维数组
数组元素个数=1
使用时,{}可省略
数组元素个数>1
使用时,{}不可省略
属性名
value
当注解只有value一个属性时
使用时,"value="可省略
当注解有多个属性时
除value属性,其他属性都有default
YES
使用时,"value="可省略
NO
使用时,"value="不可省略
其他合法属性名
使用时,属性名=属性类型的值
default
说明
为属性设置缺省值
使用注解时,可不设置此属性
作用范围 (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)
综合示例
定义注解
使用注解
参考
深入理解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
注解以@打头
注解作为一个标记,传递某种信息
一个注解就是一个类
哪里用到注解,就会在哪创建注解实例对象
javac编译器或其他程序通过反射获取元素的注解
分类
JDK内置系统注解
@Deprecated
标记某个元素过时
@Override
标记某个方法覆盖了父类方法
@SafeVarargs
参考http://book.51cto.com/art/201205/339154.htm
抑制编译器警告
此注解只能用在参数长度可变的方法或构造方法上
且方法必须声明为static或final,否则会出现编译错误
@SuppressWarnings
提示编译器不要提示警告
元注解
@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'");
}
@Inherited
说明
此注解用来标注自定义注解
此注解起到的作用:允许一个子类继承其父类上的某自定义注解
某自定义注解上标注有@Inherited
继承有效情况
从某个子类上获取注解
某个子类不覆盖父类加了注解的成员
在子类中能获取到被继承成员上的注解
继承无效情况
子类覆盖了父类加了注解的成员
在子类中获取不到成员上的注解
示例
http://blog.csdn.net/snow_crazy/article/details/39381695
@Retention
说明
标记注解存在的生命周期
Java源文件
class文件
内存中的字节码
默认值在class文件阶段
取值枚举RetentionPolicy
取值
CLASS
这种类型的Annotations编译时被保留
在class文件中存在,但JVM将会忽略
RUNTIME
这种类型的Annotations将被JVM保留
所以他们能在运行时被JVM或其他使用反射机制的代码所读取和使用
SOURCE
这种类型的Annotations只在源代码级别保留
编译时就会被忽略
@Target
说明
用于说明当前注解要作用在哪个元素上
取值枚举ElementType
取值
ANNOTATION_TYPE :注解类型声明
CONSTRUCTOR :构造方法声明
FIELD :字段声明(包括枚举常量)
LOCAL_VARIABLE :局部变量声明
METHOD :方法声明
PACKAGE :包声明
PARAMETER :参数声明
TYPE :类、接口(包括注解类型) 或enum声明
自定义注解
说明
注解之所以强大,因为它有属性
注解和接口很类似
使用注解时,()里有{}
注解的属性是数组类型
使用注解时,省略了"属性名="
注解只有一个属性
属性名为value
声明
public @interface注解名字
属性
声明
返回类型 属性名();
返回类型 属性名() default xxx;
返回类型
所有基本数据类型(int,float,boolean,byte,double,char,long,short)
String类型
Class类型
enum类型
Annotation类型
以上所有类型的一维数组
数组元素个数=1
使用时,{}可省略
数组元素个数>1
使用时,{}不可省略
属性名
value
当注解只有value一个属性时
使用时,"value="可省略
当注解有多个属性时
除value属性,其他属性都有default
YES
使用时,"value="可省略
NO
使用时,"value="不可省略
其他合法属性名
使用时,属性名=属性类型的值
default
说明
为属性设置缺省值
使用注解时,可不设置此属性
作用范围 (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)
综合示例
定义注解
使用注解
参考
深入理解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)-自定义注解
- 深入理解Java:注解(Annotation)自定义注解入门
- 深入理解Java:注解(Annotation)自定义注解入门
- Java注解Annotation
- 深入理解Java:注解(Annotation)基本概念
- JAVA 注解Annotation入门
- 深入理解Java:注解(Annotation)--注解处理器
- 深入理解Java:注解(Annotation)基本概念
- 深入理解Java(1):注解(Annotation)基本概念
- Java进阶之Annotation(注解)——Annotation(注解)概念
- Java系列(一)Annotation(注解)
- 【Java】【Annotation】Java Annotation (注解)
- 深入理解Java:注解(Annotation)自定义注解入门
- Java注解Annotation解析
- Java并发注解Annotation
- java annotation(注解)--入门
- JUnit 4 使用 Java 5 中的注解(annotation)
- 深入理解Java:注解(Annotation)自定义注解入门
- 深入理解Java:注解(Annotation)--注解处理器