注解是什么
在Java中是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。
在java中基本类型几个注解,也成为元注解
元注解
@Retention - 标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。
@Documented - 标记这些注解是否包含在用户文档中。
@Target - 标记这个注解应该是哪种 Java 成员。
@Inherited - 标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类)
这几个注解是作用到注解上的。所以也称为元注解
不同的注解作用的位置不一样,今天只介绍其中一部分
这几个是jdk自带的注解
如何使用
那么我们该如何使用注解呢?
@interface 是我们开发人员使用的自定义注解时用到的关键字为了区分接口所以在前面加了一个@符号,那么结合上面所说的元注解,应用到我们自定义的注解上。以这种形式编写格式如下
@Documented //表示当前这个注解生成文档doc文档 @Target(ElementType.TYPE)//当前这个注解只能作用于类 @Retention(RetentionPolicy.RUNTIME)//当前这个注解在什么范围下可用,当前这个 public @interface MyAnnotation1 { }
可以看到这个MyAnnotation1注解上面有三个注解,是我们上面说的元注解,那我们使用自己写的注解该如何使用呢?
可以看到我们把注解用到了方法上它显示出了红线,这就是我们用到的
@Target(ElementType.TYPE)//当前这个注解只能作用于类
这个元注解的作用,它限定了你的自定义注解可以作用于什么地方。
现在我们在@Target(ElementType.TYPE)中再添加一个新的ElementType.METHOD,再看我们这个注解就不会报错了,因为TYPE表示的时当前这个注解只能作用于类,当我们添加了METHOD后他的范围就包括了方法
现在我们将@Retention(RetentionPolicy.RUNTIME)这里修改为@Retention(RetentionPolicy.CLASS)标识着这个注解会保存在哪里,这里我们保存到类文件中,这里我们做一个对比首先RetentionPolicy.CLASS和RetentionPolicy.SOURCE的区别,第一个是保存到类中第二个是只在代码中
可以通过看他们生成class文件做出对比
使用RetentionPolicy.SOURCE了
使用RetentionPolicy.CLASS
而在上面一开始使用的RetentionPolicy.RUNTIME这个关键标识,是可以在运行时通过Java中反射来获取注解以及注解中的内容。也就是说它的存活时间更长。
通过以上这两个元注解的使用我们可以看到,这几个元注解的作用是来限定我们自定义的注解的
关于@Documented这个生成dos文件的注解大家可以下去自己实际验证一下。
现在这只是一部分的注解作用,后续会把其他注解一些内容进行一个整理