java注解概述:
java注解就是代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过使用注解,程序员可以在不改变原有代码逻辑的情况下,在源文件中嵌入补充信息。
•Annotation 可以像修饰符一样被使用, 可用于修饰包,类, 构造器, 方法, 成员变量, 参数, 局部变量的声明, 这些信息被保存在 Annotation 的 “name=value” 对中.
•Annotation 能被用来为程序元素(类, 方法, 成员变量等) 设置元数据
注解分类:
一.元注解(基本的注解)
@Retention @Target @Document @Inherited四种。
@Retention:定义注解的保留策略。
通俗的讲,它表示一个注解类型会被保留到什么时候。
@Retention(RetentionPolicy.SOURCE)//注解仅存在于源码中,在class字节码文件中不包含。
@Retention(RetentionPolicy.CLASS)// 默认的保留策略,注解会在class字节码文件中存在,但运行时无法得。
@Retention(RetentionPolicy.RUNTIME)// 注解会在class字节码文件中存在,在运行时可以通过反射获取到。
@Target:定义注解的作用目标。
@Target(ElementType.TYPE) //接口、类、枚举、注解
@Target(ElementType.FIELD) //字段、枚举的常量
@Target(ElementType.METHOD) //方法
@Target(ElementType.PARAMETER) //方法参数
@Target(ElementType.CONSTRUCTOR) //构造函数
@Target(ElementType.LOCAL_VARIABLE)//局部变量
@Target(ElementType.ANNOTATION_TYPE)//注解
@Target(ElementType.PACKAGE) ///包
@Document:说明该注解将被包含在javadoc中。
会被Javadoc工具文档化。
@Inherited:说明子类可以继承父类中的该注解。
这个比较难理解,这里详细讲一下,一般用在自定义注解上。
我们自定义注解(Annotation)时,把自定义的注解标注在父类上不会被子类所继承,但是我们可以在定义注解时给我们自定义的注解标注一个@Inherited注解来实现注解继承。
注意点:
这种标有@Inherited注解的自定义的注解运用到类级别上和方法级别上是不一样的,如果把标有@Inherited注解的自宝义的注解标注在类级别上,子类则可以继承父类类级别的注解,反之,则不行。
参考原文:https://blog.csdn.net/womengmengyan/article/details/52572302
二.内建注解 Java本身内建了一些注解,下面我们来介绍一下我们在日常开发中比较常见的注解
•三个基本的 Annotation:
–@Override: 限定重写父类方法, 该注释只能用于方法
–@Deprecated: 用于表示某个程序元素(类, 方法等)已过时
–@SuppressWarnings: 抑制编译器警告.
三.自定义注解
•定义新的 Annotation 类型使用 @interface 关键字
•Annotation 的成员变量在 Annotation 定义中以无参数方法的形式来声明. 其方法名和返回值定义了该成员的名字和类型.
•可以在定义 Annotation 的成员变量时为其指定初始值, 指定成员变量的初始值可使用 default 关键字
•没有成员定义的 Annotation 称为标记; 包含成员变量的 Annotation 称为元数据 Annotation