其实我们简单理解一下,注解就是标注在类、方法、变量、参数上的一种标签,你可以使用JDK内置的注解,也可以自定义注解,通常情况下我们都是使用自定义注解来完成自己的注解功能
JDK内置的注解
1、@Override
只要学过Java面向对象特性的人对于这个注解应该都很熟悉,@Override用来标注子类覆盖父类的方法,当标注了这个注解后父类中的方法有变更,编译器会给出错误提示
2、 @Deprecated
此注解主要是用来标识一些方法已经过时了,不推荐使用了
3、@SuppressWarnings
这个注解用于告诉编译器忽略特定的警告信息,当你不希望编译器在你的方法上有警告信息时,可以通过@SuppressWarnings注解来消除警告信息
4、@SafeVarargs
Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告
5、@FunctionalInterface
Java 8 开始支持,标识一个匿名函数或函数式接口
元注解
元注解就是用来标记注解的注解,也就是用来自定义注解的
1、@Retention
@Retention注解用来表示注解保留的阶段(源码、字节码、运行时)@Retention(RetentionPolicy.SOURCE) 注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS),默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
@Retention(RetentionPolicy.RUNTIME),注解会在class字节码文件中存在,在运行时可以通过反射获取到
自定义注解只能使用RetentionPolicy.RUNTIME
2、@Target
@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) 作用于包
@Target(ElementType.TYPE_PARAMETER) 作用于类型泛型
@Target(ElementType.TYPE_USE) 类型使用.可以用于标注任意类型除了 class
一般比较常用的是ElementType.TYPE
3、@Documented
@Documented的作用是能够将注解中的元素包含到 Javadoc 中去
4、@Inherited
当一个类被@Inherited标记时,如果子类没有被其他注解标记,那么子类会继承父类的注解
5、@Repeatable
@Repeatable标记的注解表示可以同时标记一个对象多次