# 注解基础知识

> 原文： [https://docs.oracle.com/javase/tutorial/java/annotations/basics.html](https://docs.oracle.com/javase/tutorial/java/annotations/basics.html)

## 注解的格式

在最简单的形式中，注解如下所示：

```
@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 发行版开始，支持重复注解。有关更多信息，请参阅[重复注解](repeating.html)。

注解类型可以是 Java SE API 的`java.lang`或`java.lang.annotation`包中定义的类型之一。在前面的例子中，`Override`和`SuppressWarnings`是[预定义的 Java 注解](predefined.html)。也可以定义自己的注解类型。上一个示例中的`Author`和`Ebook`注解是自定义注解类型。

## 可以使用注解的位置

注解可以应用于声明：类，字段，方法和其他程序元素的声明。当在声明中使用时，每个注解通常按照惯例出现在它自己的行上。

从 Java SE 8 发布版开始，注解也可以应用于 _ 类型的 _。这里有些例子：

*   类实例创建表达式：

    ```
        new @Interned MyObject();

    ```

*   类型转换：

    ```
        myString = (@NonNull String) str;

    ```

*   `implements`条款：

    ```
        class UnmodifiableList&lt;T&gt; implements
            @Readonly List&lt;@Readonly T&gt; { ... }

    ```

*   抛出的异常声明：

    ```
        void monitorTemperature() throws
            @Critical TemperatureException { ... }

    ```

这种形式的注解称为 _ 类型注解 _。有关更多信息，请参阅[类型注解和可插拔类型系统](type_annotations.html)。