Java教程是针对JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参阅JDK发布说明。
Java SE API中预定义了一组注解类型。一些注解类型由Java编译器使用,而一些适用于其他注解。
java.lang
中定义的预定义注解类型有@Deprecated
、@Override
和@SuppressWarnings
。
@Deprecated @Deprecated
注解表示被标记的元素已过时,不应再使用。每当程序使用带有@Deprecated
注解的方法、类或字段时,编译器会生成警告。当元素被弃用时,还应使用Javadoc的@deprecated
标签进行文档化,如下例所示。Javadoc注释和注解中的@符号使用是有关联的,不是巧合。此外,请注意Javadoc标签以小写字母d开头,而注解以大写字母D开头。
// Javadoc注释如下 /** * @deprecated * 说明为何已过时 */ @Deprecated static void deprecatedMethod() { } }
@Override @Override
注解告诉编译器该元素是用来覆盖超类中声明的元素的。覆盖方法将在接口和继承中讨论。
// 将方法标记为已被覆盖的 // 超类方法 @Override int overriddenMethod() { }
虽然在覆盖方法时不需要使用此注解,但它有助于防止错误。如果使用@Override
注解标记的方法未能正确覆盖其超类中的方法,编译器将生成错误。
@SuppressWarnings @SuppressWarnings
注解告诉编译器抑制它通常会生成的特定警告。在下面的例子中,使用了一个已过时的方法,编译器通常会生成警告。但在这种情况下,该注解导致警告被抑制。
// 使用已过时的方法,并告诉 // 编译器不生成警告 @SuppressWarnings("deprecation") void useDeprecatedMethod() { // 已过时警告 // - 被抑制 objectOne.deprecatedMethod(); }
每个编译器警告都属于一个类别。Java语言规范列出了两个类别:deprecation
和unchecked
。在与在引入泛型之前编写的旧代码进行接口时,可能会出现unchecked
警告。要抑制多个类别的警告,请使用以下语法:
@SuppressWarnings({"unchecked", "deprecation"})
@SafeVarargs @SafeVarargs
注解,当应用于方法或构造函数时,断言代码不对其varargs
参数执行潜在不安全的操作。使用此注解类型,可以抑制与varargs
使用相关的未经检查的警告。
@FunctionalInterface @FunctionalInterface
注解,引入于Java SE 8,指示类型声明意图作为Java语言规范定义的函数式接口。
适用于其他注解的注解称为元注解。在java.lang.annotation
中定义了几种元注解类型。
@Retention @Retention
注解指定了标记注解的存储方式:
RetentionPolicy.SOURCE
– 标记注解仅在源级别中保留,编译器将忽略它。RetentionPolicy.CLASS
– 标记注解在编译时由编译器保留,但Java虚拟机(JVM)将忽略它。RetentionPolicy.RUNTIME
– 标记注解由JVM保留,以便可以在运行时环境中使用。@Documented @Documented
注解指示每当使用指定的注解时,应使用Javadoc工具对这些元素进行文档化。(默认情况下,注解不包含在Javadoc中。)有关更多信息,请参见Javadoc工具页面。
@Target @Target
注解用于标记另一个注解,以限制该注解可以应用于哪种类型的Java元素。目标注解将以下元素类型之一指定为其值:
ElementType.ANNOTATION_TYPE
可以应用于注解类型。ElementType.CONSTRUCTOR
可以应用于构造函数。ElementType.FIELD
可以应用于字段或属性。ElementType.LOCAL_VARIABLE
可以应用于局部变量。ElementType.METHOD
可以应用于方法级别的注解。ElementType.PACKAGE
可以应用于包声明。ElementType.PARAMETER
可以应用于方法的参数。ElementType.TYPE
可以应用于类的任何元素。@Inherited @Inherited
注解指示该注解类型可以从超类继承。(默认情况下不是这样。)当用户查询注解类型并且类没有该类型的注解时,将查询类的超类是否有该注解类型。该注解仅适用于类声明。
@Repeatable @Repeatable
注解,Java SE 8中引入,表示标记的注解可以多次应用于相同的声明或类型使用。有关更多信息,请参阅重复注解。