【JAVA基礎】註解
阿新 • • 發佈:2020-12-09
1. 註解的基本概念
1.1. 註解(Annotation)又叫標註,是從Java5開始增加的一種引用資料型別。
1.2. 註解本質上就是程式碼中的特殊標記,通過這些標記可以在編譯、類載入、 以及執行時執行指定的處理。
2. 註解的語法格式
2.1.訪問修飾符 @interface 註解名稱 { 註解成員};
2.2. 自定義註解自動繼承java.lang.annotation.Annotation介面。
2.3. 通過@註解名稱的方式可以修飾包、類、 成員方法、成員變數、構造方 法、引數、區域性變數的宣告等。
3. 註解的使用方式
3.1. 註解體中只有成員變數沒有成員方法,而註解的成員變數以“無形參的方 法”形式來宣告,其方法名定義了該成員變數的名字,其返回值定義了該成員變數的型別。
3.2. 如果註解只有一個引數成員,建議使用引數名為value,而型別只能是八 種基本資料型別、String型別、Class型別、enum型別及Annotation型別。
4. 元註解的概念
4.1. 元註解是可以註解到註解上的註解,或者說元註解是一種基本註解,但 是它能夠應用到其它的註解上面。
4.2. 元註解主要有 @Retention、@Documented、@Target、@Inherited、 @Repeatable。
5. 元註解
5.1 @Retention
@Retention 應用到一個註解上用於說明該註解的的生命週期,取值如下
5.1.1.RetentionPolicy.SOURCE 註解只在原始碼階段保留,在編譯器進行編譯時 它將被丟棄忽視。
5.1.2. RetentionPolicy.CLASS 註解只被保留到編譯進行的時候,它並不會被加 載到 JVM 中,預設方式。
5.1.3. RetentionPolicy.RUNTIME 註解可以保留到程式執行的時候,它會被載入 進入到 JVM 中,所以在程式執行時可以獲取到它們。
5.2.元註解@Documented
5.2.1. 使用javadoc工具可以從程式原始碼中抽取類、方法、成員等註釋形成一個和原始碼配套的API幫助文件,而該工具抽取時預設不包括註解內容。
5.2.2. @Documented用於指定被該註解將被javadoc工具提取成文件。
5.2.3. 定義為@Documented的註解必須設定Retention值為RUNTIME。
5.3. 元註解@Target
@Target用於指定被修飾的註解能用於哪些元素的修飾,取值如下
ElementType.ANNOTATION_TYPE |
可以給一個註解進行註解 |
ElementType.CONSTRUCTOR |
可以給構造方法進行註解 |
ElementType.FIELD |
可以給屬性進行註解 |
ElementType.LOCAL_VARIABLE |
可以給區域性變數進行註解 |
ElementType.METHOD |
可以給方法進行註解 |
ElementType.PACKAGE |
可以給一個包進行註解 |
ElementType.PARAMETER |
可以給一個方法內的引數進行註解 |
ElementType.TYPE |
可以給型別進行註解,比如類、介面、列舉 |
5.4. 元註解@Inherited
@Inherited並不是說註解本身可以繼承,而是說如果一個超類被該註解標 記過的註解進行註解時,如果子類沒有被任何註解應用時,則子類就繼 承超類的註解。
5.5. 元註解@Repeatable
5.5.1. @Repeatable表示自然可重複的含義,從Java8開始增加的新特性。
5.5.2. 從Java8開始對元註解@Target的引數型別ElementType列舉值增加了兩個
其中ElementType.TYPE_PARAMETER 表示該註解能寫在型別變數的宣告 語句中,如:泛型。
其中ElementType.TYPE_USE 表示該註解能寫在使用型別的任何語句中
6. 常見的預製註解
6.1. 預製註解就是Java語言自身提供的註解,具體如下
@author |
標明開發該類模組的作者,多個作者之間使用,分割 |
@version |
標明該類模組的版本 |
@see |
參考轉向,也就是相關主題 |
@since |
從哪個版本開始增加的 |
@param |
對方法中某引數的說明,如果沒有引數就不能寫 |
@return |
對方法返回值的說明,如果方法的返回值型別是void就 不能寫 |
@exception |
對方法可能丟擲的異常進行說明
|
6.2. 常見的預製註解
@Override |
限定重寫父類方法, 該註解只能用於方法 |
@Deprecated |
用於表示所修飾的元素(類, 方法等)已過時 |
@SuppressWarnings |
抑制編譯器警告 |