28《重学JAVA》--注解
一、注解介绍
注解并不能改变程序运行的结果,不会影响程序运行的性能。有些注解可以在编译时给用户提示或警告,有的注解可以在运行时读写字节码文件信息。
它的形式跟接口很类似,不过前面多了一个@符号。上面的代码就创建了一个名字为TestAnnotaion的注解。
你可以简单理解为创建了一张名字为TestAnnotation的标签。
创建一个类Test,然后在类定义的地方加上@TestAnnotation就可以用TestAnnotation注解这个类了。
你可以简单理解为将TestAnnotation这张标签贴到Test这个类上面。
无论是哪一种注解,本质上都一种数据类型,是一种接口类型。到Java8为止JavaSE提供11种内置注解。其中有5是基本注解,它们来自于java.lang包。有6个是元注解1(Meta-Annotation),它们来自于java.lang.annotation包,自定义注解会用到元注解。
二、元注解
元注解包括:@Documented、@Target、@Retention、@Inherited、@Repeatable和@Native。元注解是为其他注解进行说明的注解,当自定义一个新的注解类型时,其中可以使用元注解。
这里简单介绍一下常用的元注解
Target注解的作用是:描述注解的使用范围(即:被修饰的注解可以用在什么地方) 。
Target注解用来说明那些被它所注解的注解类可修饰的对象范围:
注解可以用于修饰packages、types(类、接口、枚举、注解类)、类成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数),在定义注解类时使用了@Target能够更加清晰的知道它能够被用来修饰哪些对象,它的取值范围定义在ElementType枚举中。
Reteniton注解用来限定那些被它所注解的注解类在注解到其他类上以后,可被保留到何时,一共有三种策略,定义在RetentionPolicy枚举中。
Documented注解的作用是:描述在使用javadoc工具为类生成帮助文档时是否要保留其注解信息。
为了验证Documented注解的作用到底是什么,我们创建一个带有@Documented的自定义注解类。
Inherited注解的作用是:使被它修饰的注解具有继承性(如果某个类使用了被@Inherited修饰的注解,则其子类将自动具有该注解)。
接下来我们使用代码来进行测试,首先创建一个被@Inherited修饰的注解类MyInheritedAnnotation。