注解体的定义格式:
@interface 注解名 {
返回值类型 方法名1();
// 这就是某种类型额外信息中的,一条信息的标准化的格式定义
// 方法名代表一条信息的名字
// 返回值类型表示该条信息数据取值类型
返回值类型 方法名2();
...
}
和Java程序的一致,注解有3种保留级别:
SOURCE:注解将被编译器丢弃(class文件中没有)
CLASS:注解在class文件中可用,但会被JVM丢弃(内存没有)
RUNTIME:JVM在运行时,也会保留注解信息
注解默认情况下的保留级别是CLASS(运行时已经没了)
在定义自定义注解的时候,我们可以使用元注解,来声明自定义注解的一些特殊属性
Java中提供了4种元注解,我们最常用的是其中2个
@Target 该注解用来声明和限定注解使用的地方
@Rentention 该注解用来声明注解的保留级别
会看到在@AgeConstraint和@NameLengthConstraint注解前面都加了元注解:@Retention(RetentionPolicy.RUNTIME)
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RunTimeLimit {
// 定义一个属性,来描述,方法运行时间的上限
long value();
}
3.@Documented
即拥有这个注解的元素可以被javadoc此类的工具文档化。它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@return,@param 等。
4.@Inherited
允许子类继承父类中的注解。即拥有此注解的元素其子类可以继承父类的注解。