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 { ... }
这种形式的注解称为类型注解。更多信息请参阅类型注解和可插入类型系统。