1 注解是什么,元数据是什么
从JDK5开始,Java支持在源文件中嵌入补充信息,这类信息成为注解。注解不会改变程序的动作,因此也就不会改变程序的语
义。但是在开发和部署期间,各种工具可以使用这类信息,例如,源代码生成器可以处理注解,术语 “元数据”也用于表示这个
特性。但是术语“注解”更具描述性并且更常使用。
2 注解的原理
1 注解是通过基于接口的机制创建的,所有注解只能包含方法声明,但是不能为这些方法提供方法体,而是由Java实现这些方
法。
2 注解不能包含extends子句。但是,所有注解类型都自动扩展Annotation接口,因此,Annotation是所有注解的超接口,
3 如何定义一个注解
@interface 注解名称{
String str();
int val();
}
e.g
@interface MyAnno{
String str();
int val();
}
4 如何使用了一个注解
在JDK8之前,注解只能用于声明,所以我们先介绍注解的声明特性
4.1 注解的声明
类,方法,域变量,参数以及枚举常量都可以带有注解,甚至注解本身也可以被注解。对于所有情况,注解都要放在声明的最
前面。应用注解时,需要为注解的成员提供值。下面的使用详情对应着上面的声明
@MyAnno(str="例子",val=00)
public void test(){
}
这个注解被链接到方法test()。我们来解析一下这个过程,注解的名称以@作为前缀,后面跟位于圆括号的成员初始化列表。为了
给成员提供值。需要为成员的名称赋予值。所以在这个例子中 将字符串列子赋给MyAnno的str成员。注意在这条赋值语句中。
在str之后没有原括号。当为注解成员提供数值时,只使用成员的名称。因此,在这个上下文中,注解成员看起来像域变量
4.2 注解指定保留策略
注解的保留策略决定了什么位置丢弃注解。JAVA定义了三种策略。他们被封装到java.lang.annotation.RectentionPolicy枚
举中。这三种策略分别是 SOURCE,CLASS RUNTIME
使用SOURCE保留策略的注解。只在源文件中保留。在编译期间会被抛弃
使用CLASS保留的策略的注解。在编译时存储到.class文件中。但是,在运行时通过JVM不能得到这些注解。
使用RUNTIME 保留策略的注解,在编译时会存储到.class文件中。并且在运行时可以通过JVM获取这些注解。因此,
RUNTIME保留策略提供了最永久性的注解。