注解是一种标记,我们可以对拥有这种标记的元素进行处理
Annotation接口
所有注解类型都要继承的一个公共接口。手动继承这个接口并不会定义一个注解类型。这个接口本身并不是用来定义注解类型的。
当我们使用@interface自定义注解时,隐含的继承了这个接口。
java类型
java有四种类型:类(class)、接口(interface)、注解(@interface)、枚举(enum)
4. 元注解
注解的注解称为元注解。元注解有四种。
Target指定注解用在什么地方
Retention指定注解被保留多久
Inherited指定注解是否可以被继承
Documented指定注解是否被包含到javadoc中
Target有一个ElementType类型的数组value
ElementType中定义的常量
TYPE表示注解只能加在类、接口(包括注解)、枚举上
METHOD表示注解只能加在方法上
。。。
Retention有一个RetentionPolicy类型的元素value。
下面是RetentionPolicy中定义的枚举常量
默认的RetentionPolicy是CLASS。
5. 自定义注解
输出结果为null。因为,此时Hello注解RetentionPolicy为CLASS,表示编译时有效,运行时无效。也就是相当于在运行时没有Hello注解。如果我们将其改为RUNTIME,则输出结果如下:
我们可以利用java反编译工具(Java Decompiler)查看一下Animal.class文件
假设,我们已经将RetentionPolicy改为RUNTIME
那么,下面的代码将输出结果
之所以能输出结果是因为Hello注解被Inherited所修饰,表示注解可被继承。
6. 注解的作用
注解给被注解的元素添加了额外的辅助信息,提供了一种统一处理的方式。如果没有外部解析工具对其加以解析和处理的话,它是不会对java源代码及class等产生任何影响,也不会影响程序的执行。
7. 注解是给反射用的