从Java5版本之后可以在源代码中嵌入一些补充信息,这种补充信息称为注解( annotation ),是 java 平台中非常重要的一部分。注解都是@符号开头的,例如我们在学习方法重写时使用过的@Override注解。同Class和Interface一样,注解也属于一种类型。
Annotation可以翻译为“注解”或“注释”,一般翻译为“注解”,因为“注释”一词已经用于说明“//”、“/**…*/”和“/*…*/”等符号了,这里的“注释”是英文Comment翻译。
注解并不能改变程序的运行结果,也不会影响程序运行的性能。有些 注解 可以在编译时给用户提示或警告,有的注解可以在运行时读写 字节码 文件信息。
注解可以元数据这个词来描述,即一种描述数据的数据。所以可以说注解就是源代码的元数据。例如以下代码:
@ Override
public String toString() {
return "开课吧广场Java教程";
}1234复制代码类型:[java]
上面的代码重写了Object类的toString()方法并使用了@Override注解。如果不使用@Override注解标记代码,程序也能够正常执行。那么这么写有什么好处吗?事实上,使用@Override注解就相当于告诉编译器这个方法是一个重写方法,如果父类中不存在该方法,编译器便会报错,提示该方法没有重写父类中的方法。这样可以防止不小心拼写错误造成麻烦。
例如,在没有使用@Override注解的情况下,将 toString ()写成了toStrring(),这时程序依然能编译运行,但运行结果会和所期望的结果大不相同。
注解常见的作用有以下几种:
1、生成帮助文档。这是最常见的,也是Java最早提供的注解。常用的有@see、@param和@return等;
2、跟踪代码依赖性,实现替代配置文件功能。比较常见的是Spring2.5开始的基于注解配置。作用就是减少配置。现在的框架基本都使用了这种配置来减少配置文件的数量;
3、在编译时进行格式检查。如把@Override注解放在方法前,如果这个方法并不是重写了父类方法,则编译时就能检查出。
无论是哪一种注解,本质上都一种数据类型,是一种接口类型。到Java8为止 JavaSE 提供了11个内置注解。其中有5个是基本注解,它们来自于 java.lang 包。有6个是元注解,它们来自于java.lang.annotation包,自定义注解会用到元注解。
提示:元注解就是负责注解其他的注解。
基本注解包括:@Override、@Deprecated、@SuppressWarnings、@SafeVarargs和@FunctionalInterface。后面我们会逐一介绍。