Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
请参阅Java语言更改以了解Java SE 9及其后续版本中更新的语言功能的概述。
请参阅JDK版本说明以获取有关所有JDK版本的新功能、增强功能和已删除或已弃用选项的信息。
在Java SE 8发布之前,注解只能应用于声明。从Java SE 8发布开始,注解还可以应用于任何类型使用。这意味着注解可以在任何使用类型的地方使用。一些使用类型的示例包括类实例创建表达式(new
),强制类型转换,implements
子句和throws
子句。这种形式的注解称为类型注解,在注解基础中提供了几个示例。
类型注解的目的是支持改进Java程序的分析方式,以确保更强的类型检查。Java SE 8发布没有提供类型检查框架,但它允许您编写(或下载)作为一个或多个可插拔模块实现的类型检查框架,与Java编译器一起使用。
例如,您想要确保程序中的特定变量永远不会被赋值为null;您想要避免触发NullPointerException
。您可以编写一个自定义插件来检查这个问题。然后,您会修改代码来注释该特定变量,表示它永远不会被赋值为null。变量声明可能如下所示:
@NonNull String str;
当您编译代码时,包括在命令行中的NonNull
模块,如果编译器检测到潜在问题,则会打印出警告,让您修改代码以避免错误。在您纠正代码以消除所有警告后,该特定错误在程序运行时将不会发生。
您可以使用多个类型检查模块,其中每个模块检查不同类型的错误。通过这种方式,您可以在需要时在Java类型系统之上构建,并添加特定的检查。
通过谨慎使用类型注解和可插拔类型检查器的存在,您可以编写更强大、更不容易出错的代码。
在许多情况下,您无需编写自己的类型检查模块。有第三方已经为您完成了这项工作。例如,您可能希望利用华盛顿大学创建的Checker Framework。该框架包括一个NonNull
模块,以及一个正则表达式模块和一个互斥锁模块。有关更多信息,请参见Checker Framework。