元注解,是用来修饰其余的注解定义。java.lang.annotation包下提供了4个元注解,分别是@Target注解、@Retention注解、@Documented注解以及@Inherited注解。
java
用于指定被修饰的注解能用于修饰哪些程序元素
api
@Target注解类型有惟一的value做为成员变量,value的类型为java.lang.annotation.ElementType[]类型。app
@Target的成员变量value为以下值时,则可指定被修饰的注解只能按以下声明进行标注ide
ElementType.ANNOTATION_TYPE:被修饰的注解只能用来修饰注解工具
ElementType.CONSTRUCTOR:只能修饰构造方法spa
ElementType.FIELD:只能修饰成员变量.net
ElementType.LOCAL_VARIABLE:只能修饰局部变量3d
ElementType.METHOD:只能修饰方法声明code
ElementType.PACKAGE:只能修饰包blog
ElementType.PARAMETER:只能用来修饰参数
ElementType.TYPE:能够用来修饰类、接口、枚举声明
查看@SuppressWarning的源码
@Retention注解描述了被其修饰的注解是否被编译器丢弃或者保留在class文件中。默认状况下,注解被保存在class文件中,但在运行时并不能被反射访问。
@Rentention包含一个RetentionPolicy类型的value成员变量,其取值来自java.lang.annotation.RetentionPolicy的枚举类型值,有以下3个取值:
RetentionPolicy.CLASS(默认值):编译器将把注解记录在class文件中,当运行Java程序时,Java程序时,Java虚拟机再也不保留注解
RetentionPolicy.RUNTIME:编译器将把注解记录在class文件中,当运行Java程序时,Java虚拟机也会保留注解,程序能够经过反射获取该注解
RetentionPolicy.SOURCE 编译器将直接丢弃被修饰的注解
因为@SuppressWarning的做用只是取消编译期的警告,因此@SuppressWarning不须要保存。
@Documented用于指定被修饰的注解将被javadoc工具提取成文档。
若是定义注解时使用了@Documented修饰,则全部使用该注解修饰的程序元素的API文档中都将包含该注解说明。
@Documented注解类型中没有成员变量
javadoc命令参数有50多个,这里只简单介绍三个参数: -d,-subpackages,-sourcepath
-d 指定API文档的输出目录,默认是当前目录。建议老是指定该参数。
-sourcepath 指定源代码路径,默认是当前目录。 此参数一般是必须的。
-subpackages 以递归的方式处理各子包。关键参数!若是不使用本参数,每次只能处理一个子包(或需手工列出全部子包)。
使用参数 -author 能够将做者信息(@author ***)导出到最终生成的API文档中, -version 能够生成版本信息。若是是本身写的一个包,千万不要忘了用 -author
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package
cn.net.imentors;
import
javax.annotation.Resources;
/**
* 程序入口
* @author wangsh
* @createDate:2016年6月1日
* @version:v1.0
* 功能描述:
*/
@Resources
({})
public
class
JavadocTest {
public
static
void
main(String[] args)
{
System.out.println(
"hello!javadoc"
);
}
}
|
1
2
3
4
5
6
7
8
9
|
public
class
Person {
/**
* age属性
*/
public
int
age;
public
int
count;
public
Person() {
}
}
|
1
|
D:\>javadoc -d d:\api -sourcepath d:\src -subpackages cn.net.imentors -version -author
|
@Inherited注解用于指定被修饰的注解将具备继承性。
若是某个类使用了定义时被@Inherited修饰的注解,则其子类会自动具备这个注解。
容许子类继承父类的注解
留到下一节,再给你们举例说明@Inherited注解的使用。