标注:一种元数据,用来说明代码的特性,不属于程序本身,也不会对被标注的代码产生任何影。
1.标注的作用
a:为编译器提供信息,如去检测错误或是“不提示警告”
b:Compile-time and deployment-time processing — Software tools can process annotation information to generate code, XML files, and so forth
c:运行期处理
2.标注格式
@Entity
例如:@Override
同时标注也能包涵命名的或无名的elements,如:
如果标注有同样的类型,则成为重复标注,Java8支持重复标注,如:
在java.lang和java.lang.annotation中的标注成为预定义的标注。同时,java支持自定义的标注,如这里的Author标准。
自定义的标注一般是用来取代注释的,用来增加代码的可读性。
如之前的注释风格的:
将上述的注释变成一种元数据Annotation,首先定义annotation类,语法如下:
注意:为了让自定义的@classPreamble能够出现在Javadoc-generated文档中,你需要在@classPreamble定义的时候加上@Documented标注,如:
3.内置标注类型
分为两种:一种是给Java编译器看的,一种是用来限制说明其他标注的。
Java编译器看的:
在java.lang中定义的标注有:@Deprecated, @Override, and @SuppressWarnings。
@Deprecated:用来说明被标注的元素可以以后不会在使用。当你使用这些元素的时候,编译器会给出警告。
@Override:要编译器检测错误,表明该元素是被重载的。
@SuppressWarnings:告诉编译器不要产出特定类型的警告。
对于编译器的警告都属于特定的类型,在java语言规范中给出了两种类型:deprecation和unchecked.可以抑制多种警告,如:
@SuppressWarnings({"unchecked", "deprecation"})
@SafeVarargs :用来表明方法不会执行关于varargs的不安全的操作。抑制关于varargs的警告。
@FunctionalInterface :表明给接口是功能接口(javase8新加入的)
说明其他标注的:java.lang.annotation中
@Retention :标记被修饰的标注如何存储,具体方式有:
RetentionPolicy.SOURCE :被修饰的标注仅留中源码中,编译器会忽略这些标注。
RetentionPolicy.CLASS :会被编译器保留,但是会被JVM忽略。
RetentionPolicy.RUNTIME :存在运行期中
@Documented :表示被修饰的标注信息会输出到javadoc中(默认是不会javadoc工具处理的)
@Target :现在被修饰的标注能够作用的域,其值可为:ElementType.PARAMETER ,ElementType.LOCAL_VARIABLE 等。
@Repeatable :表明标注可重复
@Inherited :