元註解,是用來修飾其餘的註解定義。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註解的使用。