1.内置注解
@Override | 定义在 java.lang.Override 中,此注解只适用于修辞方法,表示一个方法声明打算重写超类中的另一个方法声明 |
@Deprecated | 定义在 java.lang.Deprecated 中,此注解可以用于修辞方法、属性、类,表示不鼓励程序员使用这样的程序元素,通常是因为它很危险或者存在更好的选择 |
@SuppressWarnings | 定义在 java.lang.SuppressWarnings 中,此注解用来抑制编译时的警告信息 |
@SuppressWarnings 与前两个注解有所不同,你需要添加一个参数才能正确使用,这些参数都是已经定义好了的,我们选择性使用就好了
2.元注解
元注解的作用就是负责注解其他注解
@Retention:指定其所修饰的注解的保留策略
@Document:该注解是一个标记注解,用于指示一个注解将被文档化
@Target:用来限制注解的使用范围
@Inherited:该注解使父类的注解能被其子类继承
@Repeatable:该注解是Java8新增的注解,用于开发重复注解
类型注解(Type Annotation):该注解是Java8新增的注解,可以用在任何用到类型的地方
@Retention 注解
@Retention注解注解用于指定被修饰的注解可以保留多长时间,即指定JVM策略在哪个时间点上删除当前注解。保留策略值有以下三个
策略值 | 功能描述 |
Retention.SOURCE | 注解只在源文件中保留,在编译期间删除 |
Retention.CLASS | 注解只在编译期间存在于.class文件中,运行时JVM不可获取注解信息,该策略值也是默认值 |
Retention.RUNTIME | 运行时JVM可以获取注解信息(反射),是最长注解持续期 |
@Retention如何用:@Retention(RetentionPolicy.RUNTIME)
@Document注解
@Document注解用于指定被修饰的注解可以被javadoc工具提取成文档。定义注解类时使用@Document注解进行修饰,则所有使用该注解修饰的程序元素的API文档中将会包含该注解说明
@Document如何用:@Document
@Target注解
@Target注解用来限制注解的使用范围,即指定被修饰的注解能用于哪些程序单元
枚举值 | 功能描述 |
ElementType.Type | 可以修饰类、接口、注解或枚举类型 |
ElementType.FIELD | 可以修饰属性(成员变量),包括枚举常量 |
ElementType.METHOD | 可以修饰方法 |
ElementType.PAPAMETER | 可以修饰参数 |
ElementType.CONSTRUCTOR | 可以修饰构造方法 |
ElementType.LOCAL_VARIABLE | 可以修饰局部变量 |
ElementType.ANNOTATION_TYPE | 可以修饰注解类 |
ElementType.PACKAGE | 可以修饰包 |
@Target如何用:@Target(ElementType.FIELD)
@Inherited注解
@Inherited注解指定注解具有继承性,如果某个注解使用@Inherited进行修饰,则该类使用该注解时,其子类将自动被修饰
@Repeatable注解
@Repeatable注解是Java8新增的注解,用于开发重复注解。在Java8之前,同一个程序元素前只能使用一个相同类型的注解,如果需要在同一个元素前使用多个相同类型的注解必须通过注解容器来实现。从Java8开始,允许使用多个相同的类型注解来修饰同一个元素,前提是该类型的注解是可重复的,即在定义注解时要用 @Repeatable元注解进行修饰。
类型注解
Java8为ElementType枚举增加了TYPE_PARAMETER和TYPE_USE两个枚举类值,允许在定义枚举类时使用@Target(ElementType.TYPE_USE)来修饰,此种注解被称为“类型注解”(Type Annotation)。
在Java8之前,只能在定义类、接口、方法和成员变量等程序元素时使用注解,从Java8开始新增的类型注解可以用在任何用到类型的地方。
除了在定义类、接口和方法等常见的程序元素时可以使用类型注解,还可以在以下几个位置使用类型注解进行修饰:
创建对象(使用new关键字创建)
类型转换
使用implements实现接口
使用throws声明抛出异常序列
方法参数
3.自定义注解
自定义注解是声明一个注解要用到的东西
修饰符
访问修饰符必须为public,不写默认为pubic;
关键字
关键字为@interface;
注解名称
注解名称为自定义注解的名称,使用时还会用到;
注解类型元素
注解类型元素是注解中内容,可以理解成自定义接口的实现部分
使用元注解修饰注解
-
@Target
@Target注解,是专门用来限定某个自定义注解能够被应用在哪些Java元素上面的。
表明该注解可以应用的java元素类型
Target类型 描述
ElementType.TYPE 应用于类、接口(包括注解类型)、枚举
ElementType.FIELD 应用于属性(包括枚举中的常量)
ElementType.METHOD 应用于方法
ElementType.PARAMETER 应用于方法的形参
ElementType.CONSTRUCTOR 应用于构造函数
ElementType.LOCAL_VARIABLE 应用于局部变量
ElementType.ANNOTATION_TYPE 应用于注解类型
ElementType.PACKAGE 应用于包
ElementType.TYPE_PARAMETER 1.8版本新增,应用于类型变量)
ElementType.TYPE_USE 1.8版本新增,应用于任何使用类型的语句中(例如声明语句、泛型和强制转换语句中的类型)
@Retention
@Retention注解, 表明该注解的生命周期。
注解的生命周期有三个阶段:1、Java源文件阶段(RetentionPolicy.SOURCE);2、编译到class文件阶段(RetentionPolicy.CLASS);3、运行期阶段(RetentionPolicy.RUNTIME)。同样使用了RetentionPolicy枚举类型定义了三个阶段:
@Document
表明该注解标记的元素可以被Javadoc 或类似的工具文档化
@Inherited
表明使用了@Inherited注解的注解,所标记的类的子类也会拥有这个注解