您的位置:首页 > 编程语言 > Java开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 注解 Annotation