Java 教程是针对 JDK 8 编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅 Java 语言变更,了解 Java SE 9 及后续版本中更新的语言特性的摘要。
请参阅 JDK 发行说明,了解所有 JDK 发布版本的新功能、增强功能以及已删除或已弃用选项的信息。
最简单的形式下,注解的格式如下:
@Entity
at符号(@)告诉编译器接下来的内容是一个注解。在下面的例子中,注解的名字是Override:
@Override
void mySuperMethod() { ... }
注解可以包含元素,元素可以有名称或者无名称,并且可以为这些元素赋值:
@Author(
name = "Benjamin Franklin",
date = "3/27/2003"
)
class MyClass { ... }
或者
@SuppressWarnings(value = "unchecked")
void myMethod() { ... }
如果只有一个名为value的元素,那么名称可以省略,例如:
@SuppressWarnings("unchecked")
void myMethod() { ... }
如果注解没有元素,那么括号可以省略,就像之前的@Override例子一样。
还可以在同一个声明上使用多个注解:
@Author(name = "Jane Doe")
@EBook
class MyClass { ... }
如果注解的类型相同,那么这就是一个重复注解:
@Author(name = "Jane Doe")
@Author(name = "John Smith")
class MyClass { ... }
重复注解从Java SE 8版本开始得到支持。更多信息请参阅重复注解。
注解类型可以是Java SE API的java.lang或java.lang.annotation包中定义的类型。在前面的例子中,Override和SuppressWarnings是预定义的Java注解。还可以定义自己的注解类型。前面的例子中的Author和Ebook注解是自定义注解类型。
注解可以应用于声明:类、字段、方法和其他程序元素的声明。当应用于声明时,通常每个注解都会单独出现在一行上。
从Java SE 8版本开始,注解还可以应用于类型的使用。下面是一些例子:
new @Interned MyObject();
myString = (@NonNull String) str;
implements子句:
class UnmodifiableList<T> implements
@Readonly List<@Readonly T> { ... }
void monitorTemperature() throws
@Critical TemperatureException { ... }
这种形式的注解称为类型注解。更多信息请参阅类型注解和可插入类型系统。