注解概述
注解(Annotation),是jdk5之后新增一项技术,可以通过在Java类,方法,属性等元素上加上注解,实现一些特定功能:编译检查,丰富文档化注释的内容,实现项目特定程序配置。注解只需要少量代码的存在即可;注释即解释;注解通常不会影响程序的正常逻辑,只是一种标记,Java中的注解通常是给编译器进行识别的
注解类写法
可以看到注解类的前面是@interface,查看API文档可以得知注解的本质就是一个Annotation接口
这个注解中还没有写任何的代码,因此可以在任何地方使用
元注解
元注解顾名思义我们可以理解为注解的注解,它是作用在注解中,方便我们使用注解实现想要的功能。元注解分别有@Retention、 @Target、 @Document、 @Inherited
@Retention(保留范围)
Retention表示注解存在阶段是保留在源码(编译期),字节码(类加载)或者运行期(JVM中运行)。在@Retention注解中使用枚举RetentionPolicy来表示注解保留时期
@Retention(RetentionPolicy.SOURCE),注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS), 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
@Retention(RetentionPolicy.RUNTIME), 注解会在class字节码文件中存在,在运行时可以通过反射获取到
大多数时候会用到RUNTIME。
@Target(使用范围)
可以看到使用范围非常的广泛,可以作用在任意地方
当加上使用范围时,不在范围内的注解就会报错
@Documented
Document的英文意思是文档。它的作用是能够将注解中的元素包含到 Javadoc 中去。
@Inherited
用于标记当前注解在使用到某个类上时,如果有子类继承该类,则注解也会默认作用子类上
@自定义注解支持的类型
String类型
所有的基本类型
枚举
注解
以上所有类型的数组类型
注意事项:注解中不支持自定义的数据类型
如果注解中只有一个属性(或者其他属性都有默认值),且该属性的名称叫“value”时,在使用该注解的时候只需要设置具体值就可以了,不需要设置属性名
内置注解
@Override:检查方法是否属于重写
@Depracted : 标记类,属性,方法为过时
@SupressWarning:抑制编译抛出的警告信息
@FunctionalInterface:java8新增函数式接口的检查注解
应用领域
1、丰富文档注释
2、编译检查
3、完成程序配置