注解是那些插入到源代码中用于某种工具处理的标签。这些标签可以在源代码层次上进行操作,也可以在处理编译器将它们纳入到注解类文件中。在Java中,注解是当一个修饰符来被使用的,它被置于被注解项之前,中间没有分号。
注解语法
一个注解是由一个注解接口定义的
modifiers @interface AnnotationName
{
element declaration1;
element declaration2;
}
每个元素声明有两种方式:
type elementName();或者type elementName() default value;
举例来说,下面这个注解具有两个元素:value和nums.
public @interface AnnotationDemo {
String value() default "";
int nums() default 0;
}
每个注解有下面这种格式
@AnnotationName(elementName1 = value1, elementName2 = value2, ....) 元素的顺序没有影响。如下
@AnnotationDemo (value="test", nums=5)
如果某个元素的值未指定,那么就使用声明的默认值。如下:
@AnnotationDemo(nums=5)
元素value的默认值是空字符串""
如果没有指定元素,可能是注解中没有任何元素,也可能是所有元素都是用默认值。那么就不需要使用圆括号了
@AnnotationDemo
这样的注解又称为标记注解。
当一个注解中只有一个元素,且具有特殊的名字value,这样的注解被称为单值注解。那么可以忽略掉元素名和等号
public @interface Action
{
String value();
}
可以书写成如下形式:
@Action("Hello")
注解元素类型
1、一个基本类型(int、short、long、byte、char、double、float、boolean)。
2、String
3、Class(具有一个可供选择的类型参数,计入Class<? extends SuperClass>)
4、注解类型
5、前面所述类型组成的数组
例子如下
public @interface AnnotationTest {
String assignedTo() default "[none]";
enum status{SUCCESS, ERROR};
boolean stop() default false;
Class<?> testCase() default Void.class;
ElementType type() default ElementType.TYPE;
String[] reporteBy();
}
元注解
元注解用于描述注解接口的行为属性,即用来限制其它注解的行为及范围。
1、@Target元注解可以应用于一个注解,以限制该注解可以应用到那些项上。例如:
@Target({ElementType.TYPE, ElementType.METHOD})
下面是所有可能的取值情况.它们属于枚举类型ElementType可以指定任意数量的元素类型,用括号括起来.
ANNOTATION_TYPE 注解类型声明
PACKAGE 包
TYPE 类(包括enum及接口(包括注解类型))
METHOD 方法
CONSTRUCYOR 构造器
FIELD 成员域(包括enum常量)
PARAMETER 方法或构造器参数
LOCAL_VARIABLE 本地变量
2、@Retentiont元注解用于指定一条注解应该保留多长时间。其中默认值
RetentionPolicy.CLASS
SOURCE 不包括在类文件中的注解
CLASS 类文件中的注解,但是虚拟机不需要将他们载入
RUNTIME 类文件中的注解,并由虚拟机载入。通过反射API可获取它们。
3、@Document元注解为像Javadoc这样的文档工具提供了一些提示。
4、@Inherited元注解只能应用于对类的注解。如果一个类具有继承注解,那么它的所有子类都具有同样的注解。