定义
注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。元数据是用来描述数据的数据。用数据来具体的说明一下抽象一点儿数据。我的天!绕不绕,嗯有点绕。
分类
Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中
作用在代码的注解是
@Override - 检查该方法是否是重载方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
@Deprecated - 标记过时方法。如果使用该方法,会报编译警告。
@SuppressWarnings - 指示编译器去忽略注解中声明的警告。
作用在其他注解的注解(或者说 元注解)是:
@Retention - 标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。
@Documented - 标记这些注解是否包含在用户文档中。
@Target - 标记这个注解应该是哪种 Java 成员。
@Inherited - 标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类)
从 Java 7 开始,额外添加了 3 个注解:
@SafeVarargs - Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
@FunctionalInterface - Java 8 开始支持,标识一个匿名函数或函数式接口。
@Repeatable - Java 8 开始支持,标识某注解可以在同一个声明上使用多次。
怎么用
以最简单的形式,注释如下所示:
@实体
at符号character(@)向编译器表明后面的内容是一个注释。在以下示例中,注释的名称是Override:
@覆盖
void mySuperMethod(){…}
该注释可包括元件,其可被指定或未指定,并且有值的那些元素:
@作者(
名字=“本杰明富兰克林”,
date =“3/27/2003”
)
class MyClass(){…}
@SuppressWarnings(value =“unchecked”)
void myMethod(){…}
如果只有一个value名称的元素,那么名称可以省略,如下所示:
@SuppressWarnings( “未登记”)
void myMethod(){…}
如果注释没有元素,则可以省略括号,如前面的@Override示例所示。
也可以在同一个声明中使用多个注释:
@Author(name =“Jane Doe”)
@EBook
class MyClass {…}
如果注释具有相同的类型,则称为重复注释:
@Author(name =“Jane Doe”)
@作者(姓名=“约翰史密斯”)
class MyClass {…}
从Java SE 8发行版开始支持重复注释。有关更多信息,请参阅 重复注释。
注释类型可以是Java SE API java.lang或java.lang.annotation包中定义的类型之一。在前面的例子,Override并且SuppressWarnings是 预定义的Java注解。也可以定义您自己的注释类型。在Author与Ebook前面例子中的注释是自定义的注释类型。
用在什么地方
注释可以应用于声明:类的声明,字段,方法和其他程序元素。在声明中使用时,每个注释通常按照惯例出现在其自己的行上。
从Java SE 8发行版开始,注释也可以应用于类型的使用。这里有些例子:
类实例创建表达式:
新的@Interned MyObject();
类型演员:
myString =(@NonNull String)str;
implements 条款:
类UnmodifiableList 实现
@Readonly List <@Readonly T> {…}
抛出的异常声明:
void monitorTemperature()抛出
@Critical TemperatureException {…}
这种形式的注释称为类型注释。有关更多信息,请参阅 Type Annotations和Pluggable Type Systems。