Bootstrap

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。